sql >> Databáze >  >> RDS >> Sqlserver

Jak vybrat záznamy, které neexistují na serveru SQL

Můžete to udělat pomocí rekurzivního CTE . Něco takového:

DECLARE @startDate datetime = '2/1/2014'
DECLARE @endDate datetime = '2/6/2014'

;WITH DateRange(RunningDate) AS
(
    SELECT @startDate AS RunningDate
    UNION ALL
    SELECT RunningDate + 1
    FROM DateRange
    WHERE RunningDate < @endDate
)

SELECT id, RunningDate date, value1, value2 
FROM DateRange LEFT JOIN myTable ON myTable.date = DateRange.RunningDate

Upravit... POKUD přejdete na toto řešení (vezměte na vědomí komentář Aarona Bertranda pod mou odpovědí), uvědomte si, že budete muset zadat také maximální rekurze pokud máte v úmyslu zabývat se rozsahy delšími než 3 měsíce. Výchozí hodnota je nastavena na 100. To znamená, že jak je dotaz aktuálně napsán, provede maximálně 101 dat (100 úrovní rekurze).

Můžete dodatečně zadat OPTION (MAXRECURSION 0) na konci posledního SELECT překonat toto. 0 znamená nekonečné úrovně rekurze. Ale znovu si všimněte Aaronova příspěvku.



  1. Generování SQL*Plus skriptu pomocí SQL*Plus

  2. Jak mohu získat funkci okna Redshift/Postgresql LAG pro selektivní vyloučení záznamů?

  3. ODBC 4.0

  4. PHP zobrazit obrázek BLOB z MySQL