/ / MySQL: Gruppe nach Australischem Jahr? - MySQL

MySQL: Gruppe nach Austral Jahr? - MySQL

Nehmen wir an, wir haben eine einfache Tabelle wie diese

DATE          VALUE
--------------------
2013-01-01    23
2013-06-12    34
2013-07-22    788
2013-12-16    234
2014-01-23    56
2014-04-19    88
2014-09-23    7987
2014-11-05    66
2015-02-17    987
2015-05-05    896

Nehmen wir nun an, wir wollen die nach Jahr gruppierten Mittelwerte extrahieren, die wir verwenden würden

SELECT AVG(`VALUE`) FROM tablename GROUP BY YEAR(`DATE`)

Was ist jedoch, wenn wir das Jahr nicht von Januar bis Dezember definieren, sondern von Juli bis Juni (was für viele Daten durchaus sinnvoll ist, wenn Sie auf der südlichen Hemisphäre leben).

Ich bin mir sicher, dass es einen einfachen Weg geben muss, um eine Gruppierung von Juli-Jahr bis Juni-Jahr + 1 zu erreichen. Es scheint mir nur zu entgehen.

- BEARBEITEN -

Genial! Zwei gute Lösungen kamen innerhalb von Minuten nach dem Absenden dieser Frage, die beide akzeptiert werden sollten. Ich habe Rolands Lösung wegen der Kürze akzeptiert, aber Leo Taras Antwort hat mich darauf aufmerksam gemacht, dass ich vergessen habe, das zugehörige Australische Jahr auszugeben. Basierend auf beiden Antworten habe ich diese Lösung gefunden, die genau das tut, wonach ich gefragt habe:

SELECT
YEAR(`DATE` - INTERVAL 6 MONTH) as `australyear`,
AVG(`VALUE`)
FROM tablename
GROUP BY YEAR(`DATE` - INTERVAL 6 MONTH)

Antworten:

3 für die Antwort № 1

Fügen Sie dem Gruppierungsdatum einfach 6 Monate hinzu. Ich kenne die genaue Syntax im Falle von MySQL nicht, sorry.

Pseudocode:

SELECT AVG(`VALUE`) FROM tablename GROUP BY YEAR(`DATE` + "6 MONTHS");

1 für die Antwort № 2

Versuche dies:

SELECT AVG(`VALUE`)
FROM tablename
GROUP BY
CASE
WHEN MONTH("DATE") BETWEEN 1 AND 6 THEN YEAR("DATE") - 1
ELSE YEAR(`DATE`)
END

Wenn Sie das Jahr in der Feldliste anzeigen möchten, müssen Sie Ihre Abfrage folgendermaßen umschreiben:

SELECT
CASE
WHEN MONTH("DATE") BETWEEN 1 AND 6 THEN YEAR("DATE") - 1
ELSE YEAR(`DATE`)
END, AVG(`VALUE`)
FROM tablename
GROUP BY
CASE
WHEN MONTH("DATE") BETWEEN 1 AND 6 THEN YEAR("DATE") - 1
ELSE YEAR(`DATE`)
END

Test auf SQL Fiddle