lijst met wagens die niet gereden hebben op 09/07/2020

Status
Niet open voor verdere reacties.

tartuffe2

Gebruiker
Lid geworden
30 nov 2016
Berichten
56
Hallo
Er is een tabel wagens (wagennr en omschrijvijng) met alle wagens van de firma.
Er is een tabel met de ritten (ritnr, datum en andere velden die hier geen rol spelen).
Als ik dit doe (met join-type 2 (left-join)), dan heb ik de lijst van alle auto's die nooit gereden hebben:
wagen1.png

Als ik alleen de wagens wil die niet gereden hebben op 09/07/2020, dan doe ik dit: (ook met left-join):
wagens2.png
Maar dit levert niets. Is het wel mogelijk?
Kan iemand helpen?
Bedankt.
Tartuffe
 
Niet getest... maar waarom zou je niet eerst een query maken van de ritten gefilterd op datum? En die query gebruik je dan in je tweede query.
 
Je query klopt uiteraard niet; in de Outer Join filter je op wagens die niet hebben gereden. Die staan dus ook níet in de rittentabel. Dan heeft het geen enkele zin om daar ook nog een datumfilter bij te zetten, want d’r is gewoon niks. Wat je wilt zien, is een filter op wagens die op die specifieke datum hebben gereden en dat lijstje gebruik je als filter (Not in) voor de wagens. Je hebt dus een subquery nodig als filter.

Met plaatjes kan ik niks, dus ik wacht op een voorbeeld db waarin ik de SQL voor je kan maken, als je er zelf niet uitkomt. Maar het kan dus gewoon in één query.
 
Bedankt.
Ik heb het uiteindelijk gevonden, inderdaad een select in een select:
SELECT nummer FROM wagens
WHERE wagens.nummer NOT IN
(SELECT wagens.nummer FROM wagens INNER JOIN ritten on wagens.nummer = ritten.[nummmer auto] WHERE ritten.ritdatum=#07/09/2020#)
 
Ik zou de datum zo nooit filteren, want daar ga je een keer de teil mee in (7/9/2021 of 9/7/2021? Access (VBA) gooit dat nog wel eens om als je het niet verwacht. Maak queries foolproof zodat ze altijd de juiste datum laten zien.
 
De moment dat je in VBA begint heb je met datums inderdaad prijs. Daar zijn ze bij zowel Access als Excel behoorlijk klungelachtig.
Nu niet direct getest, maar in een ver verleden heb ik dat wél gedaan, en voor zover ik me herinner: wanneer het eerste en het tweede cijfer om te draaien zijn dan doet VBA dat. De Amerikaanse datumnotatie weet je wel.

Dus 29/1/2021 blijft 29 januari 2021 (De 29ste maand bestaat niet... en VBA is dan plots slim genoeg)
Maar 2/1/2021 wordt plots 1 februari 2021 (VBA neemt dan aan dat je wel een Amerikaan bent)

Ik heb dit wel 's opgelost door in je query de datum om te vormen tot een Long. En daarop filter ik dan.

x : Clng([Datum])

En vooral véél testen met verschillende datums zowel bij de filtervelden, als bij de gezochte waarde.
 
Ik doe het altijd zo:
Code:
"(SELECT wagens.nummer FROM wagens INNER JOIN ritten on wagens.nummer = ritten.[nummmer auto] WHERE ritten.ritdatum=Cdate(" & Cdbl(DateSerial(2021;7;9)) & ")")"
Of zo:
Code:
(SELECT wagens.nummer FROM wagens INNER JOIN ritten on wagens.nummer = ritten.[nummmer auto] WHERE CDbl(ritten.ritdatum)=" & Cdbl(DateSerial(2021;7;9)) )
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan