使用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
答案 0 :(得分:0)
首先,您需要填写日期范围并填写缺失日期(示例中为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;
答案 1 :(得分:-1)
这可能是有效的,但请尝试让我知道
select date, value from test where (time,date) in (select max(time),date from test group by date);