MySQL - Query - Anzahl für jede Kalenderwoche
bubble
- datenbank
Ich habe eine Tabelle:
CREATE TABLE `print_job` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` enum('a','b','c') NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
Nun will ich für jede Kalenderwoche des Jahres 2013 die Anzahl der jeweiligen Typen haben, weiß allerdings nicht wirklich wie ich das als Query ausdrücke. Bis data hab ich einfach alle benötigten Daten abgefragt und dann mit PHP das Array zusammen gebaut.
Hier mal Beispielergebnisse:
type | week | count
------+------+-------
'a' | 0 | 5
'a' | 1 | 17
....
'a' | 51 | 0
'b' | 0 | 0
'b' | 1 | 1
....
'b' | 51 | 12
'c' | 0 | 9
'c' | 1 | 123
....
'c' | 51 | 5
Wie macht man sowas? Geht das überhaubt?
MfG
bubble
Hi,
Nun will ich für jede Kalenderwoche des Jahres 2013 die Anzahl der jeweiligen Typen haben, weiß allerdings nicht wirklich wie ich das als Query ausdrücke.
Na du gruppierst die Daten einfach nach der Kalendarwoche, und zählst sie dann.
MfG ChrisB
Nun will ich für jede Kalenderwoche des Jahres 2013 die Anzahl der jeweiligen Typen haben, weiß allerdings nicht wirklich wie ich das als Query ausdrücke.
Na du gruppierst die Daten einfach nach der Kalendarwoche, und zählst sie dann.
Das Query benutze ich bisher:
SELECT
`print_job`.`type`,
WEEKOFYEAR(`print_job`.`timestamp`) AS `week`,
COUNT(*) AS `count`
FROM
`print_job`
WHERE
YEAR(`print_job`.`timestamp`) = ?
GROUP BY
`print_job`.`type`,
`week`
ORDER BY
`type` ASC,
`week` ASC;
Dabei hab ich dann Lücken in den Kalendarwochen:
type|week|count
----+----+-----
'a' | 35 | 1
'a' | 39 | 1
'a' | 42 | 1
'a' | 44 | 1
'b' | 39 | 1
'b' | 48 | 3
Und diese Ergebnismenge möchte ich:
type|week|count
----+----+-----
'a' | 0 | 0
'a' | 1 | 0
'a' | 2 | 0
'a' | 3 | 0
....
'a' | 35 | 1
'a' | 36 | 0
'a' | 37 | 0
'a' | 38 | 0
'a' | 39 | 1
'a' | 40 | 0
'a' | 41 | 0
'a' | 42 | 1
'a' | 43 | 0
'a' | 44 | 1
'a' | 45 | 0
....
'a' | 51 | 0
'b' | 0 | 0
'b' | 1 | 0
....
'b' | 39 | 1
'b' | 40 | 0
....
'b' | 47 | 0
'b' | 48 | 3
'b' | 49 | 0
....
'b' | 51 | 0
MfG
bubble
Hi,
Dabei hab ich dann Lücken in den Kalendarwochen:
Na wenn du die Lücken nicht willst, dann heißt das ja dass du Datensätze haben möchtest für Daten, die gar nicht vorhanden sind … das ist nicht ganz so trivial.
Eine simple Möglichkeit wäre vielleicht, eine Hilfstabelle anzulegen, die einfach nur die Wochennummern von 0 (oder 1, je nachdem) bis 52/53 enthält – und dann die Daten aus deiner Tabelle an diese Hilfstabelle heranzujoinen, so dass du für jede Woche einen Datensatz erhältst …
MfG ChrisB
Eine simple Möglichkeit wäre vielleicht, eine Hilfstabelle anzulegen, die einfach nur die Wochennummern von 0 (oder 1, je nachdem) bis 52/53 enthält – und dann die Daten aus deiner Tabelle an diese Hilfstabelle heranzujoinen, so dass du für jede Woche einen Datensatz erhältst …
Da bleib ich lieber dabei mit PHP nachzufüllen, eine Tabelle nur dafür ist mir zu "unsauber".
Trotzdem danke für die Hilfe :)
MfG
bubble