Ich habe eine Tabelle für meine Benutzer, die ein Feld namens "erstellt" haben, die das Registrierungsdatum haben.Mysql Abfrage, um die Anzahl pro Monate zu erhalten
Wie kann ich eine Liste erhalten, die die Anzahl der Anmeldungen pro Monat in den letzten 12 Monaten enthält? So:
Month Count
1 1232
2 2222
3 122
4 4653
... ...
12 7654
ich die Arbeit mit MySQL nicht verwendet, so dass ich nur bis jetzt weiß, wie die Anzahl der Registrierungen im vergangenen Jahr zu zählen, nicht, wie die von letzten 12 Monaten zählen zur Gruppe. Danke im Voraus!
UPDATE
Nun ist diese erhalte ich, @fthiella-Lösung:
+------------------------------+-------------------------------+----------+
| Year(FROM_UNIXTIME(created)) | Month(FROM_UNIXTIME(created)) | Count(*) |
+------------------------------+-------------------------------+----------+
| 2012 | 4 | 9927 |
| 2012 | 5 | 5595 |
| 2012 | 6 | 4431 |
| 2012 | 7 | 3299 |
| 2012 | 8 | 429 |
| 2012 | 10 | 3698 |
| 2012 | 11 | 6208 |
| 2012 | 12 | 5142 |
| 2013 | 1 | 1196 |
| 2013 | 2 | 10 |
+------------------------------+-------------------------------+----------+
Wie ich Abfrage zwingen kann mich mit count = 0 die Monate zu geben?
Lösung von @fthiella (vielen Dank!):
SELECT y, m, Count(users.created)
FROM (
SELECT y, m
FROM
(SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
(SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
LEFT JOIN users
ON ym.y = YEAR(FROM_UNIXTIME(users.created))
AND ym.m = MONTH(FROM_UNIXTIME(users.created))
WHERE
(y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
OR
(y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
GROUP BY y, m;
Und die Ergebnisse:
+------+----+----------------------+
| y | m | Count(users.created) |
+------+----+----------------------+
| 2012 | 5 | 5595 |
| 2012 | 6 | 4431 |
| 2012 | 7 | 3299 |
| 2012 | 8 | 429 |
| 2012 | 9 | 0 |
| 2012 | 10 | 3698 |
| 2012 | 11 | 6208 |
| 2012 | 12 | 5142 |
| 2013 | 1 | 1196 |
| 2013 | 2 | 10 |
| 2013 | 3 | 0 |
| 2013 | 4 | 0 |
+------+----+----------------------+
mein Das erstellte Feld ist ein int-Feld, da mein Registrierungsdatum im Timestamp-Format ist ... –
'MONTH (FROM_UNIXTIME (your_field))' sollte funktionieren – Vatev
@DavidR Ich habe meine Antwort aktualisiert, es sollte nicht korrekt sein – fthiella