选择日期范围内的分组值总和(窗口函数)

Posted

技术标签:

【中文标题】选择日期范围内的分组值总和(窗口函数)【英文标题】:Select Sum of Grouped Values over Date Range (Window Function) 【发布时间】:2021-07-29 20:00:59 【问题描述】:

我有一张包含姓名、日期和数值的表格。我想知道第一个日期输入的总日期和第一个日期后前 90 天的数值总和。

例如

name date value
Joe 2020-10-30 3
Bob 2020-12-23 5
Joe 2021-01-03 7
Joe 2021-05-30 2

我想要一个返回的查询

name min_date sum_first_90_days
Joe 2020-10-30 10
Bob 2020-12-23 5

目前为止

SELECT name, min(date) min_date,  
sum(value) over (partition by name
                       order by date
                       rows between min(date) and dateadd(day,90,min(date))
                      ) as first_90_days_sum
FROM table

但它没有执行。这里有什么好的方法?如何设置窗口函数以对每个分区使用动态日期范围?

【问题讨论】:

【参考方案1】:

您可以使用窗口函数和聚合:

select name, sum(value)
from (select t.*,
             min(date) over (partition by name) as min_date
      from t
     ) t
where date <= min_date + interval '90 day'
group by name;

【讨论】:

以上是关于选择日期范围内的分组值总和(窗口函数)的主要内容,如果未能解决你的问题,请参考以下文章

窗口函数 - 日期之间的范围

窗口函数:如何分区?

SqlServer函数的聚合函数

在 CTE 中对日期范围内的列求和?

最大日期间隔的分析函数范围窗口

如何计算行值相对于其他行值的差异总和,特别是使用窗口函数不包括该行