1. 程式人生 > >hive臨時表中 取 分組排序後所有排列第一的元素集合

hive臨時表中 取 分組排序後所有排列第一的元素集合

以下sql的作用為:從訂單表中,獲取每個人201606月份最偏好的出行時刻。

select b.* from
(
select *, row_number() over (partition by passenger_phone order by hour_num desc) as od from
(
select passenger_phone , substr(create_time,12,2) as chuxing_hour, count(*) as hour_num from taxi.order where concat(year,month) =’201606’ and is_succ_order=1 and starting_lat>0 and dest_lat>0 group by passenger_phone , substr(create_time,12,2)
)t
) b
where b.od=1 ;

第一步:先分組聚合,形成一個臨時表t

第二步:再對臨時表 t 進行分割槽,按聚合欄位 hour_num 降序排序,每一條記錄加上行號, 形成臨時表 b

第三步:取出 表 b 中所有行號 為 1 的記錄,即是。