Hallöchen nochmal.
Problem gelöst! Danke!
Danke für den Hinweis
SQL-Statements zu schachteln. Nachdem ich die nötigen Anpassungen vorgenommen habe, kann ich num 2
SQL-Statements anführen, welche die selbe, gewünschte Ergebnismenge produzieren.
SQL-Statement 1 verwendet
kein Distinct und die
Group-by-Klausel.
SQL-Code:
SELECT DATE_FORMAT(D1.Zeitstempel,'%Y-%m') AS 'Zeitstempel',
(SELECT COUNT(D2.ID) AS 'Betrag'
FROM Datensätze D2
WHERE DATE_FORMAT(D2.Zeitstempel,'%Y-%m')<=DATE_FORMAT(D1.Zeitstempel,'%Y-%m'))
FROM Datensätze D1
GROUP BY DATE_FORMAT(D1.Zeitstempel,'%Y-%m') ASC
SQL-Statement 2 verwendet
Distinct und die
Order-by-Klausel.
SQL-Code:
SELECT DISTINCT DATE_FORMAT(D1.Zeitstempel,'%Y-%m') AS 'Zeitstempel',
(SELECT COUNT(D2.ID) AS 'Betrag'
FROM Datensaetze D2
WHERE DATE_FORMAT(D2.Zeitstempel,'%Y-%m')<=DATE_FORMAT(D1.Zeitstempel,'%Y-%m'))
FROM Datensaetze D1
ORDER BY DATE_FORMAT(D1.Zeitstempel,'%Y-%m') ASC
Wenn jemand herausfindet, welches der Statements das schnellere ist und wovon das evtl. abhängt kann es ja hier posten.
Noch ein
Hinweis zum Vergleich der Where-Klausel im eingebetteten Statement: In den angegebenen Statements wird die Funktion Date_Format verwendet. Beide verglichenen Werte werden so für die sinngemäß korrekte Vergleichbarkeit vorbereitet. Bei Zeit-Vergleichen macht es einen Unterschied,
- Angaben unterschiedlicher Genauigkeit zu vergleichen; z.B. Jahr-Monat-Tag und Jahr-Monat, also bspw. '2006-01-01' und '2006-01'. Und,
- Werte zu großer Genauigkeit als in der Select-Klausel oder Group-by-Klausel angegeben zu vergleichen; z.B. in der Select-Klausel durch Distinct oder Group-by-Klausel wird auf Jahr-Monat gruppiert, und der Vergleich findet taggenau statt.
Die Auswirkung ist nicht allzu augenscheinlich, da sie vorrangig den ersten und den letzten Datensatz betrifft. Wenn an diesen Stellen das richtige Ergebnis zudtande kommt, ist das "Glück". Da dieses Ergebnis jedoch als Graph dargestellt werden soll, würde der Graphanfang bzw. das Graphende verwirrende Werte annehmen. Gerade das Graphende ist mit seiner anzeigenden Tendenz von Bedeutung. Der sichere Weg sind die Statements wie oben im Beitrag angegeben.
Bei Vergleichen mit Zeiten lässt sich z.B. mit der Date_Format-Funktion leicht der Detaillierungsgrad leicht ändern: '%Y', '%Y-%m', '%Y-%m-%d', usw. Details siehe bei
Date_Format & Co. im
MySQL 4.1 Manual auf
MySQL.com.
Gruß,
Axos.
PS: Ich würde mir wünschen, dass mehr die Ergebnisse ihrer gelösten Probleme am Ende kurz darstellen würden. Auch ungelöste bzw. abgebrochene Fragen. Damit würde man nicht immer manchmal seitenlange Threads durchwühlen müssen um anschließend vielleicht immernoch "dumm wie zuvor" dazustehen.