query op prijstabel met datum

Status
Niet open voor verdere reacties.

Dick34

Gebruiker
Lid geworden
16 nov 2010
Berichten
77
Hallo,
Ik heb een tabel prijzen, met de volgende velden:
product_id
datum_begin
datum_eind
prijs
Voorbeeld:
product_id datum_begin datum_eind prijs
88 1-1-2010 15-7-2010 10
88 16-7-2010 30-9-2010 12
88 1-10-2010 14

De te berekenen prijs is afhankelijk van de besteldatum in de tabel orders.

Hoe kan ik een query maken die de juiste prijs vindt gegeven de besteldatum.
Ik heb zelf wel een oplossing gevonden (met BETWEEN ... AND ..), maar om het probleem van de lege datumvelden op te lossen heb ik moeten werken met een Iif constructie en een datum in de verre toekomst.

Is er een eenvoudige oplossing mogelijk of moet ik de tabellen anders inrichten?

Opmerking:
De historische prijzen zijn van belang voor het juist factureren van vroegere orders en het maken van berekeningen en analyses .
achteraf
 
Je kunt het beste de prijs opzoeken in je prijzentabel. Het is een beetje lastig om uit te leggen, daarom een voorbeeldje.... Dan is het idee hopelijk wel duidelijk.
 

Bijlagen

Ik heb je voorbeeld bekeken. Dank daarvoor. Ik heb het ook zo ongeveer opgelost, met de instructie BETWEEN [ ] AND [ ]. Alleen stuit ik op het probleem dat de einddatum niet is ingevuld (omdat er nog geen einddatum is). In jouw voorbeeld is het veld totenmet gevuld met waarden. Wat nu als je die waarde nog niet kent en dus het veld leeg is. Er is wel een range: de waarde totenmet is oneindig groot.
In mijn geval: stel ik verhoog vandaag de prijs van product X van 10 naar 15. De begindatum is dus 30-11-2010, maar de einddatum weet ik nog niet. Ik kan natuurlijk een eindatum invullen ergens in de verre toekomst, dan werkt de query wel, maar ik vraag me af of er niet een andere oplossing is.
 
Je voorbeeldje heb ik zelf ook nog verwerkt in de database, maar hij zit natuurlijk nog niet in de versie die ik daarvoor heb gepost. Om je alvast verder te helpen: je query moet er dan ongeveer zo uit zien:

Code:
Between [BeginDatum] And IIf([EindDatum] Is Null;Date();[EindDatum])

Daarbij vervangt hij de lege einddatum door vandaag, en die datum is uiteraard flexibel.
 
Ja, dat is het. Bedankt. Alleen moet ik volgens mijn boekje van ACCES 2010 niet Date() gebruiken maar Now(0).
Volgens dat boekje gebruikt ACCESS dan de systeemdatum. Dat vind ik toch wel riskant (de applicatie zal niet door mij worden gebruikt), omdat die wel eens de onjuiste datum kan aangeven (heb ikzelf een aantal keren ervaren). Daarom kies ik ervoor om in jouw formule Date() te vervangen door: #1-1-2050#. Wie dan leeft dan zorgt.

Groeten,
Dick
 
Doet Date() het niet meer???? Mijn lijstje met redenen om met een nog grotere boog om 2010 heen te lopen wordt al langer en langer :d
 
Ik heb nog eens gekeken, maar ik kan je geruststellen: Date(0) doet het nog wel. Now() geeft datum en tijd.
Dus een reden minder om NIET over te stappen op ACCESS 2010:d
 
ik heb er nog genoeg over :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan