sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man väljer poster som inte finns i SQL Server

Du kan göra detta med en rekursiv CTE . Något så här:

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

Redigera... OM du väljer den här lösningen (notera Aaron Bertrands kommentar under mitt svar), notera att du också måste ange max rekursion om du har för avsikt att hantera intervall över 3 månader. Standardinställningen är 100. Detta innebär att, eftersom frågan för närvarande skrivs, kommer den endast att göra maximalt 101 datum (100 nivåer av rekursion).

Du kan dessutom ange OPTION (MAXRECURSION 0) i slutet av den sista SELECT att övervinna detta. 0 betyder oändliga nivåer av rekursion. Men återigen, notera Arons inlägg.



  1. MySQL "välj för uppdatering" beteende

  2. För liten teckensträngsbuffert fel i Oracle Stored Procedure

  3. MySQL offset oändliga rader

  4. Nya poster sedan senaste förfrågan i MySQL View