Vous avez raison, SQL ne facilite pas l'identification des données manquantes. La technique habituelle consiste à joindre votre séquence (avec des lacunes) à une séquence complète, et à sélectionner ces éléments dans cette dernière séquence sans partenaire correspondant dans vos données.
Donc, la suggestion de @BenHoffstein maintenir une table de dates permanente est une bonne idée.
En dehors de cela, vous pouvez créer dynamiquement cette plage de dates avec un tableau d'entiers
. En supposant les integers
la table a une colonne i
avec des nombres au moins compris entre 0 et 13, et que votre table a sa colonne de date nommée 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;