Gruppieren von Daten nach Woche in MySQL
Beim Umgang mit Zeitreihendaten ist es oft nützlich, Datensätze nach Woche zu gruppieren. Während Oracle für diesen Zweck integrierte Funktionen bietet, erfordert MySQL einen etwas anderen Ansatz.
Wochentagskürzung
Um einen Zeitstempel auf Mitternacht am vorherigen Sonntag zu kürzen, als Da dies in Oracle mit TRUNC(timestamp,'DY') erfolgt, bietet MySQL kein direktes Äquivalent. Sie können dieses Verhalten jedoch mit dem folgenden Ausdruck nachahmen:
DATE_ADD(DATE(timestamp), INTERVAL (DAYOFWEEK(timestamp) - 7) DAY)
Dieser Ausdruck subtrahiert den aktuellen Wochentag vom Zeitstempel, was zu einem Datum führt, das dem vorherigen Sonntag entspricht.
Monatskürzung
Um einen Zeitstempel am ersten Tag des Monats auf Mitternacht zu kürzen, stellt MySQL Folgendes bereit: einfache DATE_FORMAT(timestamp, '%Y-%m-01')-Funktion, die der TRUNC(timestamp,'MM') von Oracle ähnelt.
Wochenkürzung
Obwohl MySQL über die Funktion WEEK(timestamp) verfügt, gibt es die Wochennummer innerhalb des Jahres zurück. Um nach vollständigen Wochen statt nach Wochennummern zu gruppieren, können Sie YEAR(timestamp) und WEEK(timestamp) in den SELECT- und GROUP BY-Klauseln wie folgt kombinieren:
SELECT YEAR(timestamp), WEEK(timestamp) FROM ... WHERE ... GROUP BY YEAR(timestamp), WEEK(timestamp)
Alternativ können Sie YEARWEEK verwenden (mysqldatefield)-Funktion, die die kombinierte Jahres- und Wochennummer zurückgibt. Allerdings ist die Ausgabe möglicherweise nicht so benutzerfreundlich wie der Ansatz YEAR(timestamp)/WEEK(timestamp).
Hinweis: Für die Aggregation nach vollständigen Wochen, einschließlich derjenigen, die sich über den Januar erstrecken Erwägen Sie zunächst die Verwendung von YEARWEEK(mysqldatefield) mit dem zweiten Argument (Modus), das entweder auf 0 oder gesetzt ist 2.
Beispiel:
Die folgende Abfrage gruppiert Daten nach vollständigen Wochen:
SELECT YEARWEEK(timestamp, 0) AS week_number, SUM(value) AS total FROM data WHERE ... GROUP BY week_number
Das obige ist der detaillierte Inhalt vonWie kann man Zeitreihendaten in MySQL effizient nach Woche gruppieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!