日期范围之间每月的总和

x6492ojm  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(404)

我有一个表,可以存储日期范围内的预定费用。我希望每月对值求和,但不确定如何构造查询以处理范围逻辑。表结构的简化版本如下,其中日期为mm/dd/yyyy格式:

Start         End          Amount  
01/15/2020   04/30/2020     200    
02/05/2020   06/30/2020     300   
03/01/2020   12/15/2020     400 
04/02/2020   10/25/2020     500

输出将根据该月的“开始”或“结束”列中存在的条目,显示每个有记录的月份的总和。所以输出如下:

Month        Amount  
01/2020      200    
02/2020      500   
03/2020      900    
04/2020      1400  
05/2020      1200    
06/2020      1200  
07/2020      900    
08/2020      900  
09/2020      900    
10/2020      900  
11/2020      500    
12/2020      500

如果没有一个单独的表来存储每个月/年来检查它是否在范围内,那么如何处理这个问题呢?

lpwwtiir

lpwwtiir1#

您可以使用递归cte,然后聚合:

with cte as (
      select datefromparts(year(start), month(start), 1) as dte, end, amount
      from t
      union all
      select dateadd(month, 1, dte), end, amount
      from cte
      where eomonth(dte) < eomonth(end)
     )
select dte, sum(amount)
from cte
group by dte;

这是一把小提琴。

相关问题