Ik heb 3 tabellen:
1 - bevat alle weken van het jaar (en het jaar zelf)
2 - bevat o.a. twee kolomen met een begin en einddatum
3 - bevat o.a. een veld waar op geselecteerd moet worden
Nu wil ik een SELECT query doen die 52 rows teruggeeft, dus:
- selecteer ik alle data uit tabel 1 waar het jaar gelijk is aan (bijv) 2003 en een GROUP BY weeknummer
- doe ik een LEFT JOIN met tabel 2 op die weeknummers waarbij de begindatum voor het weeknummer moet zitten en de einddatum er na
- doe ik een INNER JOIN op tabel 2 met tabel 3 die moet voorkomen dat er data gejoined wordt die niet aan de criteria van dat veld in tabel 3 voldoen
Dat werkt echter niet. Als ik een inner join op t2 doe, dan krijg ik 0 rows terug van mysql. Maar ik wil er 52 terughebben waarbij de uren gewoon null zijn (ik wil namelijk van de output een grafiek maken). En als ik een LEFT JOIN doe (bij t3), dan doet ie het verkeerd, want dan wordt er geen rekening gehouden met col1=A (logisch dat ie dat niet doet). Maargoed...hoe moet ik dat dan oplossen?
p.s. jaarweek is een extra kolom die bijv de waarde 200348 bevat (2003 week 48), dit omdat het concatten van jaar en weeknummer het geheel zo traag maakte. door die group by is het al zo traag als dikke teer (en ja, ik gebruik overal indexen)
1 - bevat alle weken van het jaar (en het jaar zelf)
2 - bevat o.a. twee kolomen met een begin en einddatum
3 - bevat o.a. een veld waar op geselecteerd moet worden
Nu wil ik een SELECT query doen die 52 rows teruggeeft, dus:
- selecteer ik alle data uit tabel 1 waar het jaar gelijk is aan (bijv) 2003 en een GROUP BY weeknummer
- doe ik een LEFT JOIN met tabel 2 op die weeknummers waarbij de begindatum voor het weeknummer moet zitten en de einddatum er na
- doe ik een INNER JOIN op tabel 2 met tabel 3 die moet voorkomen dat er data gejoined wordt die niet aan de criteria van dat veld in tabel 3 voldoen
code:
1
2
3
4
5
6
7
8
| SELECT t3.id, t2.isn, t1.weeknummer, SUM(t2.uren) AS uren
FROM t1
LEFT JOIN t2 ON YEARWEEK(t2.begindatum) <= t1.jaarweek AND t2.begindatum IS NOT NULL
AND (YEARWEEK(t2.einddatum) >= t1.jaarweek OR t2.einddatum IS NULL)
INNER JOIN t3 ON t3.id = t2.isn AND t3.col1 = 'A'
WHERE t1.jaar=2003
GROUP BY t1.weeknummer
ORDER BY t1.weeknummer |
Dat werkt echter niet. Als ik een inner join op t2 doe, dan krijg ik 0 rows terug van mysql. Maar ik wil er 52 terughebben waarbij de uren gewoon null zijn (ik wil namelijk van de output een grafiek maken). En als ik een LEFT JOIN doe (bij t3), dan doet ie het verkeerd, want dan wordt er geen rekening gehouden met col1=A (logisch dat ie dat niet doet). Maargoed...hoe moet ik dat dan oplossen?
p.s. jaarweek is een extra kolom die bijv de waarde 200348 bevat (2003 week 48), dit omdat het concatten van jaar en weeknummer het geheel zo traag maakte. door die group by is het al zo traag als dikke teer (en ja, ik gebruik overal indexen)