У меня есть таблица с ежедневными датами, начиная с 31 декабря 1999 года по 31 декабря 2050 года, исключая выходные.
Скажите, учитывая конкретную дату, для этого примера давайте использовать 2019-03-14. Я хочу выбрать дату, которая была 30 дней назад (количество дней должно быть гибким, поскольку это не всегда будет 30), игнорируя выходные дни, которые в этом случае будут 2019-02-01.
Как это сделать?
Я написал запрос ниже, и он действительно перечисляет 30 дней до указанной даты.
select top 30 Date
from DateDimension
where IsWeekend = 0 and Date <= '2019-03-14'
order by Date desc
Поэтому я подумал, что смогу использовать приведенный ниже запрос, чтобы получить правильный ответ 2019-02-01
;with ds as
(
select top 30 Date
from DateDimension
where IsWeekend = 0 and Date <= '2019-03-14'
)
select min(Date) from ds
Однако это не работает. Это возвращает мне первое свидание в моей таблице, 1999-12-31.
2019-03-14
2019-03-13
2019-03-12
2019-03-11
2019-03-08
2019-03-07
2019-03-06
2019-03-05
2019-03-04
2019-03-01
2019-02-28
2019-02-27
2019-02-26
2019-02-25
2019-02-22
2019-02-21
2019-02-20
2019-02-19
2019-02-18
2019-02-15
2019-02-14
2019-02-13
2019-02-12
2019-02-11
2019-02-08
2019-02-07
2019-02-06
2019-02-05
2019-02-04
2019-02-01