如何编写SQL查询返回两个指定日期的有效交易总余额?
解决方案:按指定日期分行查询交易余额
你可以通过两种方式实现按指定日期分行输出对应余额的需求,以下是具体实现:
方法1:UNION ALL 合并单日期查询
直接将两个单日期的查询结果合并,每个查询明确指定目标日期,即可得到分行的结果:
SELECT '02.05.2020' AS 查询日期, SUM(Amount) AS 对应余额 FROM 交易表 WHERE '02.05.2020' >= `End Date` UNION ALL SELECT '02.02.2021' AS 查询日期, SUM(Amount) AS 对应余额 FROM 交易表 WHERE '02.02.2021' >= `End Date`;
注意事项:
- 日期字符串需加单引号,确保与表中
End Date字段的格式匹配,避免类型转换错误 - 若字段名包含空格,需根据数据库方言用反引号(MySQL)、方括号(SQL Server)或双引号(PostgreSQL)包裹
方法2:构造日期列表关联计算(多日期场景更高效)
先创建包含目标日期的临时数据集,再与交易表关联计算每个日期的余额,适合后续需要扩展更多查询日期的场景:
支持CTE的数据库(如MySQL 8+、PostgreSQL、SQL Server)
WITH 目标日期表 AS ( SELECT '02.05.2020' AS 查询日期 UNION ALL SELECT '02.02.2021' AS 查询日期 ) SELECT td.查询日期, SUM(t.Amount) AS 对应余额 FROM 目标日期表 td LEFT JOIN 交易表 t ON td.查询日期 >= t.`End Date` GROUP BY td.查询日期;
不支持CTE的数据库(如MySQL 5.x)
SELECT td.查询日期, SUM(t.Amount) AS 对应余额 FROM ( SELECT '02.05.2020' AS 查询日期 UNION ALL SELECT '02.02.2021' AS 查询日期 ) td LEFT JOIN 交易表 t ON td.查询日期 >= t.`End Date` GROUP BY td.查询日期;
这种方式的好处是,后续新增查询日期时,只需在日期列表中添加对应的SELECT语句即可,无需重复编写聚合逻辑。
内容的提问来源于stack exchange,提问作者I_B_O
相关产品推荐
相关产品推荐

