Hive上计算两时点相差分钟数的方法

Hive比较特殊, 计算两时间点相差分钟数据的方法是,先将两时间字符串转化成时间格式,然后两者相减,再分别将小时、分钟、秒换算成分钟。
但是, 计算两时间点相差的天数又比较简单,直接用datediff函数即可。
以下为SQL示例:

--1)4月29日0:00~5月1日23:59期间,单次直播“迷你世界”游戏超过4小时的主播。
with tab_live_real as(
select room_id,name,is_profession,switch_time,updated_time,cast(updated_time as timestamp)-cast(switch_time as timestamp) time_minus  
from xxx_live_history_status 
where switch_time between '2017-04-29 00:00:00' and '2017-05-01 23:59:59' and game_id=1269)
select a1.room_id,a2.creator_uid,a1.is_profession,a1.live_duration from (
select room_id,is_profession,switch_time,updated_time,cast(hour(time_minus)*60+minute(time_minus)+second(time_minus)/60 as bigint) live_duration 
from tab_live_real
where cast(hour(time_minus)*60+minute(time_minus)+second(time_minus)/60 as bigint) >= 240) a1
left join xxx_room a2 on a1.room_id=a2.id;

--2)4月29日0:00~5月1日23:59期间,累计直播“迷你世界”游戏超过10小时的主播。
with tab_live_real as(
select room_id,name,is_profession,switch_time,updated_time,cast(updated_time as timestamp)-cast(switch_time as timestamp) time_minus  
from xxx_live_history_status 
where switch_time between '2017-04-29 00:00:00' and '2017-05-01 23:59:59' and game_id=1269)
select a1.room_id,a2.creator_uid,a1.live_duration from (
select room_id,cast(sum(hour(time_minus)*60+minute(time_minus)+second(time_minus)/60) as bigint) live_duration 
from tab_live_real
group by room_id
having cast(sum(hour(time_minus)*60+minute(time_minus)+second(time_minus)/60) as bigint)>=600) a1
left join xxx_room a2 on a1.room_id=a2.id;

你可能感兴趣的:(#,Hive,Sql)