SQL 特殊情况下的排名

问题描述 投票:0回答:1

编写 Hive SQL 查询以从如下所示的输入中获取输出。
我正在尝试添加按 event_ts 排序的排名列。但如果任何连续行都有相同的 item_id,它们应该获得相同的排名。按 item_id 进行分区在这里不起作用,因为它将从 1 开始对每个分区窗口进行排名。但我希望排名单调增加。

注意:dense_rank() 无法解决这个问题

输入:

event_ts item_id
T1 AA
T2 XX
T3 抄送
T4 抄送
T5 抄送
T6 AA

输出:

event_ts item_id 排名
T1 AA 1
T2 XX 2
T3 抄送 3
T4 抄送 3
T5 抄送 3
T6 AA 4
sql hive
1个回答
0
投票

这应该会给你你正在寻找的东西;如果上面的行具有相同的值,将保持相同的排名。

Select
event_ts,
item_id,
sum(inc) over(order by event_ts) as rank_order
from (
  select *,
    case when lag(item_id) over (order by event_ts) = item_id
      then 0 else 1 end as inc   
  from table1
) table2
© www.soinside.com 2019 - 2024. All rights reserved.