我的输入表如下:
guest_id days
101 79
101 70
101 68
101 61
102 101
102 90
102 55
103 99
103 90
请注意,天数按降序排列,由guest_id
所需的输出表:
guest_id days days_diff
101 79 0
101 70 9
101 68 2
101 61 7
102 101 0
102 90 11
102 55 35
103 99 0
103 90 9
days_diff是guest_id的第一个订单差异(不是整天的列)
答案 0 :(得分:1)
您还需要一个唯一的id
列(否则Hive不知道您的行的顺序)。
然后你可以自{}加入id=id+1
以获得分歧:
select a.guest_id,
a.days,
case when a.guest_id = b.guest_id then b.days-a.days else 0 end days_diff
from
input a
join input b on a.id=b.id-1
编辑正如Kunal在评论中所指出的,Hive确实有一个Lag窗口函数,需要PARTITION BY ... ORDER BY
子句;你仍然需要一些东西来订购你的桌子,例如,如果你有一个date
列,你将使用它如下:
SELECT guest_id,
days,
LAG(days, 1, 0) OVER (PARTITION BY guest_id ORDER BY date)
FROM input;