以下是我的表格,
City date count
Seattle 2016-07-14 10
Seattle 2016-07-15 20
Seattle 2016-07-16 30
Seattle 2016-07-18 40
Seattle 2016-07-19 50
Seattle 2016-07-20 60
Seattle 2016-07-25 70
Seattle 2016-07-26 80
Bellevue 2016-07-21 90
Bellevue 2016-07-22 100
Bellevue 2016-07-23 110
Bellevue 2016-07-25 120
Bellevue 2016-07-26 130
Bellevue 2016-07-27 140
Bellevue 2016-08-10 150
Bellevue 2016-08-11 160
Bellevue 2016-08-12 170
我想将此表汇总为日期间隔,其中每行将包含每个日期间隔。每当中断时,我想创建另一行。我的示例输出应该如下,
City min_date max_date sum_count
Seattle 2016-07-14 2016-07-16 60
Seattle 2016-07-18 2016-07-20 150
Seattle 2016-07-25 2016-07-26 150
Bellevue 2016-07-21 2016-07-23 300
Bellevue 2016-07-25 2016-07-27 390
Bellevue 2016-08-10 2016-08-12 480
如果我们可以看到,只要日期中断,就会创建一个新条目并将计数相加。我想在日期中断时创建一个条目。
我试过了,
select city, min(date), max(date) , sum(count) from table
group by city
但这里只提供两行。
有人可以帮助我在Hive中这样做吗?
答案 0 :(得分:1)
这是一个" gap-and-islands"问题。行号与日期的差异有效:
select city, min(date), max(date), sum(count)
from (select t.*,
row_number() over (partition by city order by date) as seqnum
from t
) t
group by city, date_sub(date, seqnum);