Sql 按日期平滑化结果集

Sql 按日期平滑化结果集,sql,sql-server,Sql,Sql Server,使用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:

使用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

也许这样行,但试着让我知道

select date, value from test where (time,date) in (select max(time),date from test group by date);

首先,您需要填写日期范围,并在您的示例中填写缺少的日期2014年3月21日。这可以通过加入一个日历表(如果有的话)来实现,或者通过使用递归公共表表达式来动态生成完整的序列

当您拥有完整的日期序列时,查找日期的最大值或从上一个最新的非空行开始变得很容易。在这个查询中,我使用一个相关子查询来完成它

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 Server。