Tijd tussen vertrek en eerst gemaakt factuur

Status
Niet open voor verdere reacties.

MarcMangelschots

Gebruiker
Lid geworden
22 mei 2012
Berichten
34
Situatie: (zie ook bijlage met vereenvoudigd voorbeeldbestand)

Tabel 1: reserveringen van groepen op een camping
Velden: id, groep, vertrekdatum

Tabel 2: facturen
Velden: id, reserveringsid, factuurdatum, factuurtype

Wat ik als eindresultaat wil is hoeveel tijd (dagen) er ligt tussen het vertrek van een groep en het eerste factuur dat voor deze groep wordt gemaakt.
In bijlage heb ik een aanzet van een query gemaakt maar die geeft ook een resultaat voor eventuele creditnota's of bijkomende facturen die na de eerste factuur worden gemaakt.

Iemand een idee hoe dit kan opgelost worden?
Is de vraagstelling duidelijk?

Alvast heel veel dank voor al wie tijd en moeite neemt om dit te lezen!Bekijk bijlage testfacturen.rar
 
Ik kan nu je db niet openen, dus ik moet een antwoord op basis van logica geven. En dan krijg je dit antwoord: filter je query op de eerste factuurdatum. Dat kun je doen met de functie Eerste, of met Min aangezien een datum een getal is. Ik zou dus Min gebruiken, dat is wat veiliger.
 
filter je query op de eerste factuurdatum. Dat kun je doen met de functie Eerste, of met Min aangezien een datum een getal is. Ik zou dus Min gebruiken, dat is wat veiliger.

Bedankt voor je reactie Michel!
Ik probeerde daarstraks al even wat je voorstelde maar het aantal resultaten blijft hetzelfde, ofwel doe ik het fout?
Ik voer dit uit via de functie Totalen (het sommatie-teken) en bij de factuurdatum wijzig ik "group by" in "Min".
Dat is wat je bedoelt vermoed ik?

groet,

Marc
 
Klopt, dat is de bedoeling. Of je dan daadwerkelijk alleen het eerste record ziet, is verder afhankelijk van de rest van de velden. Hoe meer velden, hoe kleiner die kans :).
 
Open je query in SQL weergave en wijzig je query hierin:

Code:
SELECT reserveringen.[einddatum verblijf], facturen.factuurdatum, reserveringen.groep, facturen.factuurnr, facturen.factuurtype, [factuurdatum]-[einddatum verblijf] AS tijd_tussen_vertrek_en_factuur
FROM reserveringen INNER JOIN facturen ON reserveringen.Id = facturen.reserveringsid
WHERE facturen.factuurdatum =
(
SELECT Min(factuurdatum)
FROM facturen
WHERE factuurdatum >= [einddatum verblijf]
)

Tardis
 
Heel veel dank Tardis!
Dat gaat de goeie kant op, nog één euvel, blijkbaar komt het resultaat voor "groep D" niet mee door.
Ik begrijp niet wat hiervan de oorzaak kan zijn.

Marc
 
Laatst bewerkt:
Volgens mij kan het met een simpelere query.
Code:
SELECT reserveringen.[einddatum verblijf], Min(facturen.factuurdatum) AS MinVanfactuurdatum, reserveringen.groep, First(facturen.factuurnr) AS EersteVanfactuurnr
FROM reserveringen INNER JOIN facturen ON reserveringen.Id = facturen.reserveringsid
WHERE (((facturen.factuurtype)="factuur"))
GROUP BY reserveringen.[einddatum verblijf], reserveringen.groep;
 
Dag Michel,
dank voor je aanvulling.
Als ik het goed zie dan gebuik je het factuurtype als beslisser, dat is echter in mijn geval niet ok omdat het ook kan voorkomen dat een eerste factuur een creditnota is.
Het blijft vreemd dat ik met de query die Tardis voorstelde geen resultaat krijg voor groep D.
Of ik zie iets over het hoofd?

Marc
 
Laatst bewerkt:
Om te beginnen: zou je willen stoppen met het compleet quooten van vorige berichten waar je op reageert? Als ik die wil lezen, dan pak ik de variant wel die er pal boven staat. Is nog een stuk leesbaarder ook, en het maakt het lezen van de complete draad een stuk overzichtelijker. Bovendien is het geen quoot meer en verliest het dus alle betekenis. Dus graag alsnog verwijderen, die quootjes. Een correct voorbeeld van een quoot (en ook noodzakelijk hier):

Wat ik als eindresultaat wil is hoeveel tijd (dagen) er ligt tussen het vertrek van een groep en het eerste factuur dat voor deze groep wordt gemaakt.

In je tabel heb je een veld [Factuurtype], met daarin de waarde "factuur''. Moet je het niet gek vinden als ik jouw vraag dus interpreteer op de manier waarop ik dat doe :)
 
En op het gevaar af dat je weer gaat quooten, hier een andere oplossing :).
Code:
SELECT reserveringen.ReserveringID, facturen.FactuurID, reserveringen.[einddatum verblijf], facturen.factuurdatum, reserveringen.groep, 
facturen.factuurnr, facturen.factuurtype, [factuurdatum]-[einddatum verblijf] AS verstreken_tijd
FROM reserveringen INNER JOIN facturen ON reserveringen.[ReserveringID] = facturen.reserveringsid
WHERE (((facturen.FactuurID) In (SELECT TOP 1 FactuurID                            
   FROM facturen AS Dupe                              
   WHERE Dupe.ReserveringsID = facturen.ReserveringsID        
   ORDER BY Dupe.factuurdatum ASC, Dupe.FactuurID DESC)))
ORDER BY reserveringen.ReserveringID, facturen.FactuurID;
 
Michel,

(kijk eens zonder quote ;-) )
als ik jouw laatste suggestie uittest dan krijg ik een heleboel vragen naar parameterwaardes
voor FactuurID, Dupe.factuurID, reserveringen.ReserveringID, facturen.FactuurID,

groet,

Marc

Weet dat de quotes een intrinsieke bewondering voor uw code in zich dragen ;-)
 
Laatst bewerkt:
Als je naar mijn code kijkt, en naar je eigen tabel, dan valt je allicht op dat jouw sleutelvelden ID heten, en de mijne resp. FactuurID en ReserveringID. Ik kan namelijk niet tegen nietszeggende veldnamen, dus ik heb de velden hernoemd :)
 
Ach, als je het niet verwacht dan let je er ook niet op :D
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan