2017-02-21 186 views
1

以下是我有表,總結日期,數到最小和最大日期按時間間隔 - SQL

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

這是一個「缺口 - 島嶼」問題。行號與日期的區別作品:

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); 
+0

我們應該在這裏加羣的城市嗎? – Observer

+1

@Observer。 。 。大聲笑。是的,這將使查詢正確。 –