Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[SQL] Query wordt soms niet uitgevoerd

None
4 antwoorden
  • 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: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?
  • 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).
  • 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

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.