evilmoe
Goto Top

SELECT Datum gruppieren in Stunden

Hallo,


ich wähle aus meiner DB Werte der letzten 2 Stunden aus um diese in Form einer Statistik auszugeben.
Ich habe ca für alle 5min einen Eintrag. Der Wert kann varieren. Nun möchte ich ca. jede 30min oder in einen Stundenschritt den Maximalwert haben.

Den Maximalwert zu bestimmen ist kein Problem, gibt ja MAX.

Nun weiß ich nicht wie ich das mit dem Datum lösen kann.
Die Spalte "date" ist im Format: 0000-00-00 00:00:00

Bisher sieht das dann so aus
SELECT date, MAX(wert) FROM `Tabelle`
WHERE DATE_SUB(CURDATE(),INTERVAL 2 DAY) <= date
GROUB BY (Hier müsste ich dann die Zeit gruppieren)

Ich könnte es auch mit PHP "sortieren". Aber vielleicht weiß jemand wie ich das mit SQl machen kann.
Es müsste dann so aussehen das z.B 17:31 zu 17:30 gruppiert wird, bis 17:44.

17:45 wird dann zu 18Uhr grupiert etc. Genauso dann 15:14 dann zu 15:00.

Ich hoffe ich konnte es einiger maßen gut erklären.

Ich hoffe das jemand mir weiterhelfen kann.

Content-Key: 166181

Url: https://administrator.de/contentid/166181

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: Biber
Biber 12.05.2011 um 19:17:30 Uhr
Goto Top
Moin EvilMoe,

in SQL bin ich auch nicht so fit, aber ich würde es in der GROUP BY-Clause so versuchen:

...
GROUP BY DATE( deinDatumsfeld), HOUR( TIME( deinDatumsfeld) ) 
...wenn eine Differenzierung nach Stunden reicht.

Wenn es feiner sein soll, hier für Halbstundentakt:
...
GROUP BY DATE( deinDatumsfeld), HOUR( TIME( deinDatumsfeld) ) , CASE WHEN MINUTE( TIME( deinDatumsfeld) ) < 30 THEN 1 ELSE 2 END


Wenn es noch feiner sein soll, hier für Viertelstundentakt:
...
GROUP BY DATE( deinDatumsfeld), HOUR( TIME( deinDatumsfeld) ) , 
           CASE WHEN MINUTE( TIME( deinDatumsfeld) ) < 15 THEN 1 
           CASE WHEN MINUTE( TIME( deinDatumsfeld) ) < 30 THEN 2 
           CASE WHEN MINUTE( TIME( deinDatumsfeld) ) < 45 THEN 3 
           ELSE 4 
         END

ungetestet

Grüße
Biber
Mitglied: EvilMoe
EvilMoe 12.05.2011 um 19:32:28 Uhr
Goto Top
Moin Biber,

du hast dich wohl unterschätzt was SQL angeht ;)

Funktioniert so wunderbar.


Vielen Dank!


Nachtrag: Da meine Einträge nie genau auf Minute 0 oder 30 sind habe ich noch folgendes ergänzt.
Im Select
CASE WHEN MINUTE( TIME( date_played ) ) < 30 THEN '0' ELSE '30' END as minute  
So habe ich alle Minuten entweder genau 30 oder 0.