Как я могу создать SQL представление с динамическими c датами? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь создать представление SQL, которое имеет два столбца, один является фиксированным столбцом, а другой - столбцом даты. Представление будет иметь 730 строк с разными датами. Даты будут основываться на сегодняшней дате, когда она начнется через год в прошлом и закончится через год в будущем.

Итак, я хочу сделать это:

SELECT *
  FROM (VALUES ('NW',getdate())
             , ('NW',dateadd(day,-1,getdate()))
       ) t1 (client, date)

Конечно, я мог бы продолжать добавлять строки в запрос следующим образом:

SELECT *
  FROM (VALUES ('NW',dateadd(day,1,getdate()))
            , ('NW',getdate())
            , ('NW',dateadd(day,-1,getdate()))
            , ('NW',dateadd(day,-2,getdate()))
            , ('NW',dateadd(day,-3,getdate()))
       ) t1 (client, date)

Но я не хочу добавлять 730 строк в код. Есть ли умный способ добавить логи c, которые автоматически экстраполируют на основе сегодняшней даты?

Спасибо

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете использовать Common Table Expression для генерации такого результата на лету, как показано ниже:

declare @startDate Date =  dateadd(year,-1,getdate()) 
declare @endDate Date =  dateadd(year,1,getdate()) 

;with GetDates As  
(  
select DATEADD(day,1,@startDate) as TheDate
UNION ALL  
select DATEADD(day,1, TheDate) from GetDates  
where TheDate < @endDate  
) select * from GetDates

Fiddle

...