编写 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 |
这应该会给你你正在寻找的东西;如果上面的行具有相同的值,将保持相同的排名。
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