sql - 有没有一种优雅的方法可以在 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)
解决方案
我正在使用以下 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;
推荐阅读
- android - 如何使用 kotlin 在 android studio 中的片段之间滑动?
- python - 将字符串中的所有冗余浮点数转换为整数
- javascript - 从 Google Vision API 获取时出现 TypeError
- typescript - Typescript tsconfig 设置输出一个文件?
- r - 如何让我的 train() 函数在闪亮状态下运行以评估模型性能?
- tensorflow - 这个 Dense 层是如何计算它的维度的?
- asp.net-core-mvc - MVC Net Core Identity 用户不使用 EF 而不是 SQL
- laravel - 检查模型是否属于其他模型
- ios - Swift + Facebook SDK + AppDelegate
- sql-server - T-SQL 复合索引足以查询列的子集?