我有一张桌子,每天的日期从1999年12月31日到2050年12月31日,不包括周末。
说出一个特定的日期,对于此示例,请使用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
答案 0 :(得分:1)
没有ORDER BY,TOP是没有意义的,因此您可以执行类似的操作
;with ds as
(
select top 30 Date
from DateDimension
where IsWeekend = 0 and Date <= '2019-03-14'
order by Date DESC
)
select min(Date) from ds;
更好的是使用ANSI语法而不是TOP:
select Date
from DateDimension
where IsWeekend = 0 and Date <= '2019-03-14'
order by Date DESC
OFFSET 30 ROWS FETCH NEXT 1 ROW ONLY;
免责声明-由于未提供DDL和示例数据,因此未经过测试的代码
HTH