2016-10-02 5 views
2

Ich versuche herauszufinden, die effizienteste Art der Berechnung von Statistiken mit Daten aus MySQL-Datenbank mit Daten.MySQL-Gruppierung nach Saison

Derzeit verwende ich die folgende Syntax

Beispiel:

SELECT sum(Precipitation) from DataTable GROUP BY YEAR(Datetime) 

Die perfekt funktioniert gut, bekomme ich den Gesamtniederschlag pro Jahr. Jetzt möchte ich jedoch die Möglichkeit implementieren, den Beginn der Regenzeit festzulegen. An einigen Orten könnte die Regenzeit zum Beispiel im September beginnen. In diesem Fall würde ich die gleiche Berechnung benötigen, dh auch gruppiert nach "Jahren", aber immer seit September bis Aug.

Ich habe darüber nachgedacht, wie man das macht und der einzige Weg, an den ich denken könnte, wäre die Berechnung der monatliche Summen und die Verwendung von PHP versuchen, sie zu addieren. Aber das Problem ist, dass das wahrscheinlich viel langsamer sein würde, da es viele Daten gibt und das ursprüngliche Skript nur diese eine Zeile verwendet.

Gibt es eine effizientere Möglichkeit dann immer etwas, wie

2014 - xyz Zoll, 2015 - xyz Zoll, aber wo die 2014 würde beispielsweise zu Saison entsprechen 2014/2015 usw.

Die Daten in der Tabelle ist so: Spalte 1 ist immer die Datetime und dann der tatsächliche Wert, Daten in 5-Minuten-Intervallen. Ich muss die Tabellenstruktur pflegen, daher kann ich keine andere Tabelle erstellen, in der die Werte anders organisiert wären.

+0

Verändern sich diese Jahreszeiten von Jahr zu Jahr, oder ist es jedes Jahr das gleiche feste Datum? Ich bitte nur darum, den richtigen Rat zu geben. In irgendeiner Weise wird das SQL größer und komplexer, aber haben Sie keine Angst davor! – Bjoern

Antwort

4

Verwenden Sie diese Abfrage:

SELECT SUM(Precipitation) 
FROM DataTable 
GROUP BY YEAR(DATE_SUB(Datetime, INTERVAL 8 MONTH)) 

Diese Abfrage verschiebt jedes Datum rückwärts von 8 Monaten, mit dem Ergebnis, dass 1. September 2016 erscheint der erste Tag 2016 und August 2016 zu sein, scheint der letzte Monat von 2015 zu sein.

+0

Wow, danke! Ich kannte den Befehl DATE_SUB nicht, Sie haben mir viel redunantes PHP-Scripting eingespart :) – Jachym

Verwandte Themen