P.E. Nikolajsen skrev:
> måned el uge - antal indmeldte - antal udmeldte - evt en saldo
>
> Det eneste jeg kan finde på er noget med at opbygge en
> temporer tabel med følgende struktur:
>
> dato, ind (0 el 1), ud (0 el 1)
Det skulle ikke være nødvendigt med en temp-tabel. Det er simpelt
nok at tage indmeldte eller udmeldte for sig:
SELECT Year(indmeldt) as Aar, Month(indmeldt) As Maaned,
COUNT(*) AS AntalIndmeldte
FROM tabel
GROUP BY Aar, Maaned
SELECT Year(udmeldt) as Aar, Month(udmeldt) As Maaned,
COUNT(*) AS AntalUdmeldte
FROM tabel
GROUP BY Aar, Maaned
For at lægge dem sammen i et enkelt postsæt, kan man i princippet
benytte et FULL OUTER JOIN - men det understøtter MySQL vist ikke.
I stedet kan følgende være en mulighed:
SELECT d.*, i.antalIndmeldte, u.AntalUdmeldte
FROM
(
SELECT Year(indmeldt) as Aar, Month(indmeldt) As Maaned,
FROM tabel
UNION
SELECT Year(udmeldt) as Aar, Month(udmeldt) As Maaned,
FROM tabel
) d
LEFT JOIN
(
SELECT Year(indmeldt) as Aar, Month(indmeldt) As Maaned,
COUNT(*) AS AntalIndmeldte
FROM tabel
GROUP BY Aar, Maaned
) i
ON d.Aar = i.Aar AND d.Maaned = i.Maaned
LEFT JOIN
(
SELECT Year(udmeldt) as Aar, Month(udmeldt) As Maaned,
COUNT(*) AS AntalUdmeldte
FROM tabel
GROUP BY Aar, Maaned
) u
ON d.Aar = u.Aar AND d.Maaned = u.Maaned
ORDER BY d.Aar, d.Maaned
Jeg ved ikke hvad du mener med saldo, men hvis det differencen
mellem ind- og udmeldte, er det bare at tilføje beregningen i
selectlisten:
SELECT d.*, i.antalIndmeldte, u.AntalUdmeldte,
i.antalIndmeldte - u.antalUdmeldte AS medlemstilgang
Der skal nok også laves en konvertering af NULL => 0 i beregningen.
I MSSQL kan det gøres med ISNULL(feltnavn, 0) - jeg ved ikke hvad
man gør i Mysql.
Ovenstående viser kun måneder/år hvor der er indmeldt eller udmeldt
mindst én person. Hvis tomme måneder også skal med, skal man lave
en select der udvælger alle de ønskede datoværdier, og benytte den
som basistabellen for LEFT JOIN.
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen
|