with loin_format as(
select
user_id,dt,case when cast(hour(login_time) as int) <=4 then
concat(
(cast(hour(login_time) as int) + 24),'@',login_time) else concat(cast(hour(login_time) as int) + 10 ,'@',login_time) end as login_time_format
from ods.user_login where dt >= '2021-01-01' and dt <= '2021-12-15'
), login as(
select user_id userid,min(login_time) min_time,max(login_time) max_time,count(distinct dt) login_dt from loin_format group by user_id
)
select split(t1.min_time,'@')[1],split(t1.max_time,'@')[1],userid from login limit 10;
- 最早:05:00:00~7:59:59,
- 最晚:21:00:00~次日04:59:59(21:00:00~23:59:59&00:00:00~4:59:59)