Daten aggregieren mit SQL?
2009-08-27 23:53
Muelli
Ahoi,
sorry fuer das komische Subject, aber mir fiel nichts treffenderes ein.
Ich hab ein Problem, was ich gerade nicht mit SQL erschlagen kann, aber will ;-)
Ich habe da so eine Mitgliederdatenbank mit einem Datumsfeld "renewed_on".
Eine Mitgliedschaft ist "aktiv" wenn sie vor spaetestens einem Monat renewed worden ist.
Nun will ich also wissen, wer aktiv ist.
SELECT firstname, lastname, renewed_on FROM members WHERE renewed_on <= DATE_SUB(CURDATE(), INTERVAL 1 MONTH);
Kein Problem.
Aber nun moechte ich die Anzahl der Mitglieder ueber die Zeit haben.
Also sowas wie
SELECT DATE_FORMAT(renewed_on, '%Y-%m') AS renewed, COUNT(*) FROM members GROUP BY renewed;
+———+———-+
| renewed | COUNT(*) |
+———+———-+
| 2008-10 | 16 |
| 2008-11 | 8 |
| 2008-12 | 2 |
+———+———-+
Aber das macht natuerlich nicht das, was ich moechte, weil es nicht die Mitglieder des letzten Monats aggregiert, sondern nur die "neuen" Mitglieder aufzeigt.
Im Prizip will ich ein Query, was die folgende Ausgabe (auf Basis der o.g. Daten) produziert
+———+———-+
| all_members | COUNT(*) |
+———+———-+
| 2008-10 | 16 |
| 2008-11 | 24 |
| 2008-12 | 10 |
+———+———-+
Mein Ansatz waere jetzt, mit einem Programm ueber die Monate zu iterieren und die Daten entsprechend zu aggregieren,a ber ich hoffe auf ein SQL Loesung, damit ich weniger programmieren muss :P
sorry fuer das komische Subject, aber mir fiel nichts treffenderes ein.
Ich hab ein Problem, was ich gerade nicht mit SQL erschlagen kann, aber will ;-)
Ich habe da so eine Mitgliederdatenbank mit einem Datumsfeld "renewed_on".
Eine Mitgliedschaft ist "aktiv" wenn sie vor spaetestens einem Monat renewed worden ist.
Nun will ich also wissen, wer aktiv ist.
SELECT firstname, lastname, renewed_on FROM members WHERE renewed_on <= DATE_SUB(CURDATE(), INTERVAL 1 MONTH);
Kein Problem.
Aber nun moechte ich die Anzahl der Mitglieder ueber die Zeit haben.
Also sowas wie
SELECT DATE_FORMAT(renewed_on, '%Y-%m') AS renewed, COUNT(*) FROM members GROUP BY renewed;
+———+———-+
| renewed | COUNT(*) |
+———+———-+
| 2008-10 | 16 |
| 2008-11 | 8 |
| 2008-12 | 2 |
+———+———-+
Aber das macht natuerlich nicht das, was ich moechte, weil es nicht die Mitglieder des letzten Monats aggregiert, sondern nur die "neuen" Mitglieder aufzeigt.
Im Prizip will ich ein Query, was die folgende Ausgabe (auf Basis der o.g. Daten) produziert
+———+———-+
| all_members | COUNT(*) |
+———+———-+
| 2008-10 | 16 |
| 2008-11 | 24 |
| 2008-12 | 10 |
+———+———-+
Mein Ansatz waere jetzt, mit einem Programm ueber die Monate zu iterieren und die Daten entsprechend zu aggregieren,a ber ich hoffe auf ein SQL Loesung, damit ich weniger programmieren muss :P