按日期平滑结果集

时间:2015-07-20 16:16:15

标签: 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:       Value
19/3/2014   6
20/3/2014   4
21/3/2014   4
22/3/2014   5

2 个答案:

答案 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);