首页 > 解决方案 > 有没有一种优雅的方法可以在 MS SQL 中获取最后 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)

标签: sqlsql-server

解决方案


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

递归 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;

推荐阅读