Du opnår typisk denne type ting ved at JOIN-ing med en værditabel , altså en tabel, som indeholder alle de værdier, du er interesseret i.
Typiske værditabeller kan f.eks. indeholde alle heltalværdier mellem 0 og 1.000, eller alle datoer for en given periode. Ofte indeholder værditabellerne flere værdier end ønsket, og vi opnår det nøjagtige output, der ønskes ved at tilføje filtre i WHERE-sætningen.
I dette tilfælde vil du kræve en sådan tabel, som indeholder datoer. Hvis vi antager, at denne tabel hedder ValTableDates, og at den indeholder alle datoerne mellem januar 2005 og december 2010, vil forespørgslen se sådan ud:
SELECT AVG(data) AS data, VT.ValDate
FROM ValTableDates VT
LEFT JOIN table T ON T.dateReg = VT.ValDate
WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg)
ORDER BY dateReg
Ovenstående forespørgsel kan kræve en smule justering for at få en værdi nul i stedet for NULL, men hovedpointen er, at værditabellen typisk er den enkleste måde at levere outputposter for manglende datapunkter.
Et alternativ er at bruge en funktion/udtryk, der producerer den ønskede [dato]-sekvens inde i en underforespørgsel, men dette er generelt mindre effektivt og mere udsat for fejl.