sql - 按日期平滑结果集

标签 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

最佳答案

首先,您需要完成日期范围并填写缺失的日期(在您的示例中为 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/

相关文章:

mysql - 如何使用 phpmyadmin 检查电子邮件是否存在于两个表中

mysql - 需要帮助通过连接优化 MySQL 查询

mysql - 仅当当前字段存在于数组中时如何对字段进行计数或求和

c# - 最佳加密方式

json - 如何处理 JSON_VALUE 路径中的美元 ($) 符号

SQL Server : Create an optimized view that retrieve the most recent non null value

sql-server - 在 SQL 中优化 XML

sql - 如果没有 CASE 语句,值为 0 则返回 1

sql - 如何使用SQL计算时间序列数据的ADI和COV?

sql-server - 如何将本地数据库迁移到引用另一个数据库的azure?