Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да изберете записи, които не съществуват в Sql сървъра

Можете да направите това с рекурсивен CTE . Нещо подобно:

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

Редактиране... АКО все пак изберете това решение (обърнете внимание на коментара на Арън Бертран под моя отговор), имайте предвид, че ще трябва също да посочите максимална рекурсия ако възнамерявате да работите с диапазони, по-големи от 3 месеца. По подразбиране е зададено 100. Това означава, че тъй като заявката е написана в момента, тя ще изпълни само максимум 101 дати (100 нива на рекурсия).

Можете допълнително да посочите OPTION (MAXRECURSION 0) в края на последния SELECT да преодолее това. 0 означава безкрайни нива на рекурсия. Но отново, обърнете внимание на публикацията на Арън.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изявление за Sql Case в Sql IN

  2. Операторът INSERT е в конфликт с ограничението FOREIGN KEY

  3. Как мога да определя инсталираните екземпляри на SQL Server и техните версии?

  4. Добавете WHERE клаузи към SQL динамично / програмно

  5. RODBC sqlSave проблеми при създаването на таблица