如何用SQL遍历指定日期范围并合并所有月度查询结果为统一输出
实现方案
仅合并所有月份结果按顺序输出
如果你只需要把2019年1月到2020年12月的所有数据按时间先后拼接,不需要重复输出历史数据,直接调整WHERE条件加排序即可,效果等价于原24条SQL执行后按顺序拼接结果:
SELECT * FROM tableA A WHERE A.Date >= '2019-01-01' AND A.Date < '2021-01-01' ORDER BY A.Date ASC
实现输出样例中的滚动累计效果
如果你需要的是样例展示的效果:先输出1月的所有数据,再输出1-2月的所有数据,再输出1-3月的所有数据,直到最后输出全部24个月的数据,可以通过生成月份序列关联实现,以下是通用写法:
WITH month_series AS ( SELECT '2019-01-01' AS month_bound UNION ALL SELECT '2019-02-01' UNION ALL SELECT '2019-03-01' UNION ALL SELECT '2019-04-01' -- 按规律补全剩余月份,直到最后一行是'2021-01-01' UNION ALL SELECT '2021-01-01' ) SELECT A.* FROM month_series ms JOIN tableA A ON A.Date < ms.month_bound WHERE ms.month_bound >= '2019-02-01' ORDER BY ms.month_bound, A.Date ASC
如果你的数据库支持递归CTE或者内置日期序列生成函数,可以简化月份序列的生成逻辑,不需要手动逐条写UNION ALL。
内容的提问来源于stack exchange,提问作者codelearner0504
相关产品推荐
相关产品推荐

