Eben ohne Date(), da der Cast bei ungültigen Daten auf die Nase fällt und aufhört.
Du musst eine Kalendertabelle anlegen, die halt nur die gültigen Werte enthält sowie die 3-Teilung der Felder, Also Date, JJJJ, MM, DD.
Dann machst du einen Index über JJJJ, MM, DD.
Anschliessend machst du einen
select * from a
exception join from kalender using (jjjj, mm, dd)

Exception entspricht dem "where not exists".

Using = Kurzform des join on, wenn die Namen auf beiden Seiten identisch sind.