2017-02-21 1 views
1

Hier finden Sie die Tabelle das ich habe,Fasst das Datum, zählen zu Minimal- und Maximal das Datum des Intervall - 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 

Ich möchte diese Tabelle in Datumsintervalle zusammenfassen, wo jede Zeile jedes Intervall enthalten des Datums. Wann immer es eine Pause in den Tagen gibt, möchte ich eine weitere Reihe erstellen. Meine Probe ausgegeben werden soll, wie folgt

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 

hier, wenn wir sehen können, wann immer es ein Bruch in den Tagen ist, wird ein neuer Eintrag erstellt und die Zählung wird über summiert. Ich möchte einen Eintrag erstellen, wenn das Datum unterbrochen ist.

Ich habe versucht,

select city, min(date), max(date) , sum(count) from table 
group by city 

aber das gibt hier nur zwei Reihen.

Kann mir jemand dabei in Hive helfen?

Antwort

1

Dies ist ein "Lücken-und-Inseln" -Problem. Der Unterschied der Zeilennummer von dem Datum funktioniert:

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

sollten wir Stadt in Gruppe von hier hinzufügen? – Observer

+1

@Observer. . . LOL. Ja, das würde die Anfrage korrekt machen. –

Verwandte Themen