104128
Goto Top

Monatlich Auswertung der letzten 2 Jahre ab heutigem Datum

Folgendes habe ich vor:

Es liegt eine Datenbank vor mit einem Datumsfeld im Format "YYYY-MM-DD" welches ich auch nicht beeinflussen kann. Ich möchte nun eine automatisierte Auswertung tätigen, bei dem ab heute 2 Jahre zurück gerechnet wird und mir die Zahlen Monatsweise ausgegeben werden.
Als Beispiel:

Ich möchte den Zeitraum 09.05.2010 - 09.05.2012 auswerten. Die Daten aus der Datenbank auslesen ist nicht das Problem - das Problem besteht in der zeitlichen Berechnung.

Die Queries an die MySQL würden lauten:

"SELECT * FROM daten WHERE datum BETWEEN "2010-01-01" AND "2010-01-31"
"SELECT * FROM daten WHERE datum BETWEEN "2010-02-01" AND "2010-02-28"
"SELECT * FROM daten WHERE datum BETWEEN "2010-03-01" AND "2010-02-31"
...

Alternativ könnte ich auch alle Daten der letzten 2 Jahre in ein Array lesen:
"SELECT * FROM daten WHERE datum BETWEEN "2010-01-01" AND "2012-05-09"

nur wie bekomme ich dann immer die einzelnen Monate aus dem Array?

Die Ausgabe sollte dann als Tabelle erfolgen (nachfolgend Beispielspalten):

ID | Jan 10 | Feb 10 | Mrz 10 | April 10 | ... | Mrz 12 | Apr 12 | Mai 12


Hat jemand einen Lösungsansatz für mich?? ;-D


### EDIT ###
Die Datensätze sind nach Tagen gespeichert. Es gibt also z. B. mehrere Datensätze mit "2011-05-05" oder ähnlichem.

Content-Key: 184699

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

Printed on: April 19, 2024 at 07:04 o'clock

Member: napperman
napperman May 09, 2012 at 09:36:42 (UTC)
Goto Top
Hallo.

WHERE Datum BETWEEN (year(getdate()-2) AND getdate()
Sollte schonmal das Ergebnis liefern.
Member: napperman
napperman May 09, 2012 at 09:38:58 (UTC)
Goto Top
Mitglied: 104128
104128 May 09, 2012 at 09:57:11 (UTC)
Goto Top
Ich sag ja: Die Daten Datumsmäßig aus der DB bekommen ist nicht das Problem.

Wie aber kann ich, wenn alle Daten in einem Array sind, die einzelnen Monate heraus bekommen?

Mein Array würde so aussehen:

ID -> Datum -> Menge
1 -> 2011-05-05 -> 3
2 -> 2011-05-05 -> 4
3 -> 2011-05-06 -> 1
4 -> 2011-07-15 -> 3

Jetzt möchte ich alle Mengen des Monats 05 zusammenfassen. Alle des Monats 06, alle des Monats 07,...
Member: amax2000
amax2000 May 09, 2012 at 11:07:29 (UTC)
Goto Top
Hi thebrains,

datepart(Datum, mm), datepart(datum,yyyy) dürfte schon beim select dein Freund sein und dann noch SUM(Menge)...hier evtl. noch mit ISNULL transformieren

Hoffe ich zumindest face-wink

Grüße,


amax
Mitglied: 104128
104128 May 09, 2012 at 13:07:03 (UTC)
Goto Top
Habs jetzt wie folgt gelöst:

1) Aktuelles Datum - 2 Jahre
2) Schleife für die Jahre
2.1) Schleife für die Monate
2.2) Addierung der Mengen für Monat.Jahr
3) Eintragung in eine Tabelle "Zusammenfassung" für jeden einzelnen Monat.Jahr

Der zweite Schritt:

1) Aktuelles Datum - 2 Jahre
2) SELECT an die DB um die Daten der letzten 2 Jahre auslesen
-> diese sind bereits Monatsweise gespeichert
3) Speicherung in 2 Arrays (Mengen und Zeit)
4) Ausgabe als Liniendiagramm

Ich muss dazu sagen, dass es um über 9 Mio Datenbankeinträge geht. Eine Aktualisierung der Daten findet jede Nacht statt, da täglich neue Daten hinzukommen.
Gerade läuft mein Script für die Zusammenfassung. Der lief heut moin schon einmal und hatte über 45 Minuten benötigt. Allerdings ist die Performance nach der Zusammenfassung wesentlich schneller beim Abruf der Monatsdaten als vorher die Summierung der einzelnenen Tage zu Monaten + anschließender Ausgabe.

Trotzdem danke für die Denkanstöße, hat mir auf jeden Fall geholfen face-smile

lg, Marc