2012-04-11 5 views
4

Ich habe eine Tabelle mit einer Datetime-Spalte und einigen anderen Spalten. Die Datetime-Spalte repräsentiert ein Ereignis. Es kann entweder eine Zeit enthalten (Ereignis ist zu dieser Zeit passiert) oder NULL (Ereignis ist nicht geschehen)Gruppensätze nach Zeit

Ich möchte jetzt die Anzahl der Datensätze in bestimmten Intervallen (15 Minuten) zählen, aber weiß nicht wie TU das.

Beispiel:

id | time    | foreign_key 
1 | 2012-01-01 00:00:01 | 2 
2 | 2012-01-01 00:02:01 | 4 
3 | 2012-01-01 00:16:00 | 1 
4 | 2012-01-01 00:17:00 | 9 
5 | 2012-01-01 00:31:00 | 6 

Ich möchte jetzt eine Abfrage erstellen, die eine Ergebnismenge ähnlich erstellt:

interval   | COUNT(id) 
2012-01-01 00:00:00 | 2 
2012-01-01 00:15:00 | 2 
2012-01-01 00:30:00 | 1 

Ist das möglich in SQL oder kann jemand raten, was andere Werkzeuge, die ich verwenden könnte ?

Antwort

8

dieses Probieren Sie:

select datetime((strftime('%s', time)/900) * 900, 'unixepoch') interval, 
     count(*) cnt 
from t 
group by interval 
order by interval 

Überprüfen Sie die Geige here.

+2

Clevere Verwendung von Integer-Rundung + Unix-Timestamp, Ty – dtech

1

(zB die Daten in ein Tabellenkalkulationsprogramm exportieren würde kein Problem sein) Ich SQLite Hintergrund eingeschränkt haben (und keine Praxis Beispiel), aber ich würde versuchen, die Minuten packte

strftime(FORMAT, TIMESTRING, MOD, MOD, ...) 

mit dem %M mit Modifikator (http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html)

Dann teilen, dass mit 15 und den Boden des Quotienten erhalten, um herauszufinden, welche Viertelstunde sind Sie in (zB 0, 1, 2 oder 3)

cast(x as int) 

Getting the floor value of a number in SQLite?

Strung zusammen könnte es etwa so aussehen:

Select cast((strftime('YYYY-MM-DD HH:MI:SS', your_time_field, '%M')/15) as int) from your_table 

(Sie könnten werfen müssen, bevor Sie mit 15 als auch teilen, da strftime wahrscheinlich einen String zurückgibt)

Dann Gruppe von die Viertelstunde.

Entschuldigung, ich habe keine exakte Syntax für Sie, aber dieser Ansatz sollte es Ihnen ermöglichen, die funktionalen Gruppierungen zu bekommen, nach denen Sie die Ausgabe massieren können, damit es so aussieht, wie Sie wollen.