总结日期,按间隔计算最小和最大日期 - SQL

时间:2017-02-21 22:56:16

标签: sql hive

以下是我的表格,

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中这样做吗?

1 个答案:

答案 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);