Masz rację — SQL nie ułatwia identyfikowania brakujących danych. Typową techniką jest łączenie sekwencji (z przerwami) z pełną sekwencją i wybieranie tych elementów w drugiej sekwencji bez odpowiedniego partnera w danych.
Tak więc sugestia od @BenHoffsteina utrzymanie stałej tabeli dat jest dobre.
Poza tym możesz dynamicznie tworzyć ten zakres dat za pomocą tabela liczb całkowitych
. Zakładając integers
tabela ma kolumnę i
z liczbami co najmniej od 0 do 13, a Twoja tabela ma kolumnę daty o nazwie 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;