sql >> Database >  >> RDS >> Sqlserver

Hoe records te selecteren die niet bestaan ​​in Sql Server

U kunt dit doen met een recursieve CTE . Zoiets als dit:

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

Bewerken... ALS je voor deze oplossing kiest (let op de opmerking van Aaron Bertrand onder mijn antwoord), houd er dan rekening mee dat je ook de max recursie als u van plan bent om te gaan met reeksen van meer dan 3 maanden. De standaard is ingesteld op 100. Dit betekent dat, aangezien de query momenteel is geschreven, deze maximaal 101 datums zal doen (100 niveaus van recursie).

U kunt bovendien OPTION (MAXRECURSION 0) . specificeren aan het einde van de laatste SELECT om dit te overwinnen. 0 betekent oneindige niveaus van recursie. Maar nogmaals, let op Aarons post.



  1. Kan ik een primaire sleutel hebben zonder geclusterde index? Kan ik ook een geclusterde index met meerdere waarden hebben?

  2. Slaapcommando in T-SQL?

  3. Verwijder dubbele records uit een tabel zonder pk of id of unieke kolommen in mysql

  4. Hoe een tabel te laten vallen op basis van IF-voorwaarde in postgres?