sql - SQL - 基于动态日期范围的动态总和
问题描述
我是 SQL 新手,我什至不确定我想要实现的目标是否可行。
我有两张桌子。第一个给出一个帐号、一个“开始”日期和一个“截止”日期。第二个表显示每个帐户的每月交易量。
Table 1 - Dates
Account# Date_from Date_to
-------- --------- -------
123 2018-01-01 2018-12-10
456 2018-06-01 2018-12-10
789 2018-04-23 2018-11-01
Table 2 - Monthly_Volume
Account# Date Volume
--------- ---------- ------
123 2017-12-01 5
123 2018-01-15 5
123 2018-02-05 5
456 2018-01-01 10
456 2018-10-01 15
789 2017-06-01 5
789 2018-01-15 10
789 2018-06-20 7
我想以这样的方式合并这两个表,即表 1 中的每个帐户都有第四列,它给出了 Date_from 和 Date_to 之间的交易量总和。
Desired Result:
Account# Date_from Date_to Sum(Volume)
-------- --------- ------- -----------
123 2018-01-01 2018-12-10 10
456 2018-06-01 2018-12-10 15
789 2018-04-23 2018-11-01 7
我相信通过执行以下操作并将结果加入到 Dates 表中,可以单独为每个帐户实现这一点:
SELECT
Account#,
SUM(Volume)
FROM Monthly_Volume
WHERE
Account# = '123'
AND Date_from >= TO_DATE('2018-01-01', 'YYYY-MM-DD')
AND Date_to <= TO_DATE('2018-12-10', 'YYYY-MM-DD')
GROUP BY Account#
我想知道的是,是否有可能无需为每个帐户单独填写 Account#、Date_from 和 Date_to(大约有 1,000 个帐户)就可以实现这一点,但是是否可以为每个条目自动完成日期表。
谢谢!
解决方案
您应该能够使用join
and group by
:
select d.account#, d.Date_from, d.Date_to, sum(mv.volume)
from dates d left join
monthly_volume mv
on mv.account# = d.account# and
mv.date between d.Date_from and d.Date_to
group by d.account#, d.Date_from, d.Date_to;
推荐阅读
- .net - 向网格中的视图添加超链接
- powershell - REST API 电子邮件通知
- c# - 正在返回一个 Span
从临时 byte[] 危险(可能会在使用时产生异常)? - firebase - Firebase 分析事件 - currentScreen 始终为 screen_view
- c# - ECDH (secp256r1) + NIST SP 800-56A 使用 .NET 连接 KDF 在 C# 中真的不可能吗?
- c# - 如何在.net core 中将多个 WSDL 代理组合成一个类?
- javascript - Openlayers 从 Geoson 文件中获取值属性
- flutter - 继承小部件传递参数不保留值
- java - 在 java 中使用 PrintWriter 将国际字符写入 HttpServletResponse 时,显示为 ä½ å¥½
- swift - 如何从 Vapor 3 中的 JSON 响应中保存父子关系