2009-06-18 14 views
3

Haben Sie Tabelle ABC mit einer Spalte. Eine Datumsspalte "erstellt". Also Beispielwerte sind wie;Group-by/Aggregation über Datumsbereiche

created 
2009-06-18 13:56:00 
2009-06-18 12:56:00 
2009-06-17 14:02:00 
2009-06-17 13:12:23 
2009-06-16 10:02:10 

Ich möchte eine Abfrage schreiben, so dass die Ergebnisse:

count created 
2  2009-06-18 
2  2009-06-17 
1  2009-06-16 

Grundsätzlich zählen, wie viele Einträge zu jedem Zeitpunkt gehören, aber die Zeit zu ignorieren.

Dies ist in PL-SQL mit Oracle.

Irgendwelche Ideen?

+0

Technisch gibt es nichts In dieser Frage, die PL-SQL-spezifisch ist. –

Antwort

2

select count(*), to_char('YYYY-MM-DD', created) from ABC group by to_char('YYYY-MM-DD', created)

11

Die TRUNC Funktion gibt das Datum des DATETIME-.

select trunc(created),count(*) from ABC group by trunc(created) 
+0

Beat mich dazu. :-) –

+1

BTW, diese Antwort wird für ORACLE funktionieren, aber SQL Server hat nicht diese wunderbare und nützliche Funktion ... – tekBlues

2

Nur der Vollständigkeit halber, werde ich eine verallgemeinerte Variante hinzufügen, die für beliebig definiert Eimer arbeitet Größen:

SELECT trunc((created - to_date('2000.01.01', 'YYYY.MM.DD')) 
       * 24 
      )/24 
     + to_date('2000.01.01', 'YYYY.MM.DD') theDate 
     , count(*) 
    FROM Layer 
GROUP BY trunc((created - to_date('2000.01.01', 'YYYY.MM.DD')) 
       * 24 
      )/24 
     + to_date('2000.01.01', 'YYYY.MM.DD') 
ORDER BY 1; 

Die Abfrage oben werden Sie von Stunde die Zählungen geben; Verwenden Sie etwas kleiner als 24, um größere Intervalle zu erhalten, oder größer, um kleinere Intervalle zu erstellen. Durch Umkehrung der Position des * und/können Sie Ihre Eimer in Schritten von Tagen machen (zB „/ 7“ anstelle von „* 24“ tun würden Sie Eimer jeweils eine Woche.

Verwandte Themen