有没有一种优雅的方法可以在MSSQL中获取最后x天的一组行



我正在使用下面的Select语句来获取一组包含过去x天数据的行,我将使用这些行与其他业务数据连接来创建图表,我想知道是否有更优雅的方法可以做到这一点(我需要最后28天(。

SELECT *
FROM (
VALUES (0,
dateadd(DAY, 0, convert(date, getdate())),
datepart(WEEKDAY, dateadd(DAY, 0, CONVERT(date, getdate()))),
datepart(ISO_WEEK, dateadd(DAY, 0, CONVERT(date, getdate())))),
(1,
dateadd(DAY, -1, convert(date, getdate())),
datepart(WEEKDAY, dateadd(DAY, -1, CONVERT(date, getdate()))),
datepart(ISO_WEEK, dateadd(DAY, -1, CONVERT(date, getdate()))))
) V(DayValue, DateValue, DayPart, WeekPart)

我正在使用下面的Select语句来获取一组行,其中包含最后一个的数据

I递归CTE是生成少数日期的一种非常简单的方法:

with dates as (
select convert(date, getdate()) as dte, 1 as n
union all
select dateadd(day, -1, dte), n + 1
from dates
where n < 28
)
select *
from dates;

超过100天,您需要添加option (maxrecursion 0)

当然,如果你有一个日历表或数字表,那是可以使用的。事实上,任何至少有28行的表都可以使用:

with dates as (
select top (28) dateadd(day, 
1 - row_number() over (order by (select null)),
convert(date, getdate())
) as dte
from t      
)
select *
from dates;

最新更新