Du har rätt – SQL gör det inte lätt att identifiera saknade data. Den vanliga tekniken är att sammanfoga din sekvens (med luckor) mot en komplett sekvens och välja dessa element i den senare sekvensen utan en motsvarande partner i dina data.
Så @BenHoffsteins förslag att behålla en permanent datumtabell är bra.
Utöver det kan du dynamiskt skapa det datumintervallet med en heltalstabell
. Om vi antar integers
tabellen har en kolumn i
med siffror minst 0 – 13, och att din tabell har sin datumkolumn med namnet datestamp
:
SELECT candidate_date AS missing
FROM (SELECT CURRENT_DATE + INTERVAL i DAY AS candidate_date
FROM integers
WHERE i < 14) AS next_two_weeks
LEFT JOIN my_table ON candidate_date = datestamp
WHERE datestamp is NULL;