select * from db where datum between [datum] and [datum] alle datums terug

Status
Niet open voor verdere reacties.

jeroenSturm

Gebruiker
Lid geworden
2 mei 2012
Berichten
197
hallo mensen,
ik heb een select statement geschreven wat als volgt is
[SQL]
SELECT
[Status]
FROM
[Select_all_unsorted]
WHERE
[Naam] = 'Jan'
AND [datum] BETWEEN '2013-10-28' AND '2013-11-1' AND [Id] = 1[/SQL]

nu wil ik dat er in het between statement bij elke datum iets terug gegeven word ook als het niets is dus bij 2013-10-29 is leeg dat wil ik gewoon 'null' terug krijgen
en natuurlijk als er data is dat dat dan terug komt .
vb.

null
100
null
null
100

(datum's zijn normaal variabelen.)
is dit mogelijk??

alvast bedankt
 
Laatst bewerkt door een moderator:
nu wil ik dat er in het between statement bij elke datum iets terug gegeven word ook als het niets is dus bij 2013-10-29 is leeg dat wil ik gewoon 'null' terug krijgen
en natuurlijk als er data is dat dat dan terug komt .

Probeer die zijn nog eens, maar dan in het Nederlands :)

Ik gok dat je bedoelt dat je een serie records wilt krijgen voor elke datum binnen het bereik dat je in BETWEEN aangeeft, ook als er geen record voor die datum bestaat?

Dan heb je een probleem want je kunt geen records teruggeven die niet bestaan.

De gebruikelijke oplossing is om een auxilliary table te gebruiken, dat is een tabel met daarin alleen een serie getallen van 0 tot 10000 ofzoiets. In de betere databases kun je dat ook doen met een serie intervallen en dan begin je met 0 dagen, 1 dag, 2 dagen, tot 10000 dagen. Verolgens kun je die getallen of intervallen gebruiken om nieuwe datums te genereren:

[SQL]SELECT
'2013-10-28' + (getal*interval 1 day)
FROM auxtabel[/SQL]

en dat kun je weer joinen aan je data tabel (ik ken de syntax van jouw database niet dus ik spam er standaard sql doorheen):

[SQL]
SELECT
[STATUS]
FROM
(SELECT
'2013-10-28' + (getal*interval 1 day) AS datum
FROM auxtabel) AS datums
LEFT JOIN
[Select_all_unsorted] ON [Select_all_unsorted].[datum]=datums.datum
WHERE
[Naam] = 'Jan'
AND datums.[datum] BETWEEN '2013-10-28' AND '2013-11-1' AND [Id] = 1
[/SQL]

Effectief krijg je nu dus een tabel met datums van 2013-10-28 tot ergens 10k dagen in de toekomst en die LEFT JOIN je aan je datatabel op basis van de datum, zodat je alle datums uit de 'datums' tabel/query krijgt met eventueel aanwezige data uit 'Select_all_unsorted' als die er is voor die datum.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan