anoniem Geplaatst: 14 mei 2002 Delen Geplaatst: 14 mei 2002 Voor een schoolopdracht moet ik een SQL-query maken, die alle contracten, die een medewerker met medewerkernummer 13 in de maand mei 2002 bij een bedrijf heeft, moet teruggeven. Hiervoor is benodigd de tabel contract. In deze tabel wordt het medewerkerID bijgehouden en wordt alleen de begindatum van dat contract bijgehouden, de einddatum is overbodig. De query die ik nu heb, is: SELECT * FROM Contract WHERE MedewerkerID = 13 AND Begindatum <= #06/01/2002# AND Begindatum >= (SELECT Max(Begindatum) FROM Contract WHERE MedewerkerID = 13 AND Begindatum <= #05/01/2002#) ORDER BY Begindatum Wanneer een medewerker voor het begin van de maand nog geen contracten heeft, dan loopt de query dus spaak. Ik heb echter nog geen andere oplossing kunnen vinden. Voor de duidelijkheid: Een contract kan op iedere dag van het jaar ingaan, in de maand mei kan een medewerker dus in principe 31 verschillende contracten hebben. [ Dit bericht is bewerkt door: TweakersOnly op 2002-05-14 19:10 ] Quote Link naar reactie
anoniem Geplaatst: 14 mei 2002 Auteur Delen Geplaatst: 14 mei 2002 [quote:1d3a316bcd] ..die alle contracten, die een medewerker met medewerkernummer 13 in de maand mei 2002 bij een bedrijf heeft, moet teruggeven. Hiervoor is benodigd de tabel contract. In deze tabel wordt het medewerkerID bijgehouden en wordt alleen de begindatum van dat contract bijgehouden, de einddatum is overbodig. [/quote:1d3a316bcd] einddatum is overbodig, dus alles tot en met mei? SELECT * FROM Contract WHERE (MedewerkerID = 13) AND (Begindatum < #06/01/2002#) [quote:1d3a316bcd] SELECT * FROM Contract WHERE MedewerkerID = 13 AND Begindatum <= #06/01/2002# AND Begindatum >= (SELECT Max(Begindatum) FROM Contract WHERE MedewerkerID = 13 AND Begindatum <= #05/01/2002#) ORDER BY Begindatum [/quote:1d3a316bcd] Wat bereken je in de sub query? Het laatste contract t/m 1 mei. [quote:1d3a316bcd] Wanneer een medewerker voor het begin van de maand nog geen contracten heeft, dan loopt de query dus spaak. Ik heb echter nog geen andere oplossing kunnen vinden. [/quote:1d3a316bcd] zie boven [quote:1d3a316bcd] Voor de duidelijkheid: Een contract kan op iedere dag van het jaar ingaan, in de maand mei kan een medewerker dus in principe 31 verschillende contracten hebben. [/quote:1d3a316bcd] wat moet het resultaat zijn? Alle contracten t/m de maand mei (zie sqlcode hierboven) of alle contracten die in mei zijn begonnen? Quote Link naar reactie
anoniem Geplaatst: 14 mei 2002 Auteur Delen Geplaatst: 14 mei 2002 Wanneer ik het zo lees denk ik ook dat je het te moeilijk hebt gemaakt. Wat is precies de vraag? Alle contracten die in mei zijn begonnen? Of alle contracten die in mei nog openstonden? In het eerste geval volstaat inderdaad: select * from contracten where id = 13 and begindatum >= 01052002 and begindatum <= 31052002 In het tweede geval hoef je alleen te testen of de begindatum voor 1 mei ligt (mits de einddatum werkelijk overbodig is). Quote Link naar reactie
anoniem Geplaatst: 22 mei 2002 Auteur Delen Geplaatst: 22 mei 2002 beter laat dan nooit ;) waarom niet gewoon [i:bd3cf5fd32]month(date)[/i:bd3cf5fd32] gebruiken? Of mogen er geen db-specifieke functies worden gebruikt? select * from contract where medewerkerid = 13 and month(begindatum) = 5 Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen