Ik heb een set waarden met alleen een begindatum. Daarvan wil ik de waarde hebben die op een specifieke peildatum geldig is.
Als de waarden ook een einddatum hebben is het makkelijk:
SELECT value
FROM table
WHERE startdate <= mydate AND
(enddate IS NULL OR enddate >= mydate)
Maar hoe doe ik dat netjes als ik alleen een startdatum heb en het moment van niet meer geldig zijn afgeleid wordt van of er een waarde is met een hoger startdatum is? Dit doe ik nu:
SELECT value
FROM table LEFT OUTER JOIN table_later ON
table.startdate < table_later.startdate AND
table.startdate <= mydate AND
table_later.startdate <= mydate AND
table_later.startdate IS NULL
Ik heb dus twee keer de tabel gejoined met de startdatum <= peildatum, waarbij de tweede met een left outer join gekoppeld is (dus NULL mag zijn) en NULL moet zijn en een startdatum > dan de eerste tabel moet hebben. Een ingewikkelde manier om te zeggen dat er geen waarden mogen zijn die tussen de opgeleverde waarden en de peildatum inliggen. Dit is natuurlijk niet mooi. Maar hoe doe ik dit wel goed?
Als de waarden ook een einddatum hebben is het makkelijk:
SELECT value
FROM table
WHERE startdate <= mydate AND
(enddate IS NULL OR enddate >= mydate)
Maar hoe doe ik dat netjes als ik alleen een startdatum heb en het moment van niet meer geldig zijn afgeleid wordt van of er een waarde is met een hoger startdatum is? Dit doe ik nu:
SELECT value
FROM table LEFT OUTER JOIN table_later ON
table.startdate < table_later.startdate AND
table.startdate <= mydate AND
table_later.startdate <= mydate AND
table_later.startdate IS NULL
Ik heb dus twee keer de tabel gejoined met de startdatum <= peildatum, waarbij de tweede met een left outer join gekoppeld is (dus NULL mag zijn) en NULL moet zijn en een startdatum > dan de eerste tabel moet hebben. Een ingewikkelde manier om te zeggen dat er geen waarden mogen zijn die tussen de opgeleverde waarden en de peildatum inliggen. Dit is natuurlijk niet mooi. Maar hoe doe ik dit wel goed?
[ Voor 0% gewijzigd door Milmoor op 05-11-2014 22:10 . Reden: enters in query toegevoegd ]
Rekeningrijden is onvermijdelijk, uitstel is struisvogelpolitiek.