Heim >Datenbank >MySQL-Tutorial >Wie kann man Zeitreihendaten in MySQL effizient nach Woche gruppieren?

Wie kann man Zeitreihendaten in MySQL effizient nach Woche gruppieren?

DDD
DDDOriginal
2024-12-13 06:02:10648Durchsuche

How to Efficiently Group Time-Series Data by Week in MySQL?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn