sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan vælger du poster, der ikke findes i SQL Server

Du kunne gøre dette med en rekursiv CTE . Noget som dette:

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

Rediger... HVIS du går med denne løsning (læg mærke til Aaron Bertrands kommentar under mit svar), bemærk, at du også skal angive maksimal rekursion hvis du har til hensigt at beskæftige dig med intervaller på mere end 3 måneder. Standarden er sat til 100. Det betyder, at som forespørgslen er skrevet i øjeblikket, vil den kun udføre maksimalt 101 datoer (100 niveauer af rekursion).

Du kan desuden angive OPTION (MAXRECURSION 0) i slutningen af ​​den sidste SELECT at overvinde dette. 0 betyder uendelige niveauer af rekursion. Men igen, læg mærke til Aarons indlæg.



  1. Henter data fra MYSQL baseret på ugenummer

  2. Forecasting af tidsseriedata i Oracle/SQL

  3. Vis databaser/tabeller I UDFIL

  4. Postgresql grupper efter for flere linjer