我需要使用 SQL 从每天包含 0-N 条记录的数据集中返回一组平滑的结果(即每天一个)。
每天的结果应该是最近的先前值,即使它不是来自同一天。例如:
起始数据:
Date: Time: Value
19/3/2014 10:01 5
19/3/2014 11:08 3
19/3/2014 17:19 6
20/3/2014 09:11 4
22/3/2014 14:01 5
要求的输出:
Date: Value
19/3/2014 6
20/3/2014 4
21/3/2014 4
22/3/2014 5
最佳答案
首先,您需要完成日期范围并填写缺失的日期(在您的示例中为 21/3/2014
)。这可以通过加入日历表(如果有的话)或使用递归公用表表达式动态生成完整序列来完成。
当您拥有完整的日期序列时,找到日期的最大值或从最近的前一个非空行中查找最大值变得容易。在此查询中,我使用相关子查询来执行此操作。
with cte as (
select min(date) date, max(date) max_date from your_table
union all
select dateadd(day, 1, date) date, max_date
from cte
where date < max_date
)
select
c.date,
(
select top 1 max(value) from your_table
where date <= c.date group by date order by date desc
) value
from cte c
order by c.date;
关于sql - 按日期平滑结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521419/