查询时间区间内特殊日标识总和大于14的区间记录
问题描述
我有两张表:
- 第一张表(假设名为
date_ranges)存储时间区间的起始和结束日期,结构如下:
DATE_START | DATE_END ------------------------------ 2020-01-04 2023-07-04
- 第二张表(假设名为
calendar)是日历表,包含日期和布尔类型的SPECIAL_DAY_FLAG(特殊日标识),结构如下:
DATE | SPECIAL_DAY_FLAG ------------------------------ 2020-01-04 1 2020-01-05 0
需要编写SQL查询语句,仅返回第一张表中DATE_START和DATE_END之间特殊日标识总和大于14的行。
解决方案
通过关联两张表并分组聚合的方式实现,具体SQL语句如下:
SELECT dr.DATE_START, dr.DATE_END FROM date_ranges dr JOIN calendar c ON c.DATE BETWEEN dr.DATE_START AND dr.DATE_END GROUP BY dr.DATE_START, dr.DATE_END HAVING SUM(c.SPECIAL_DAY_FLAG) > 14;
逻辑说明
- 用
JOIN关联两张表,筛选出日历表中落在每个时间区间内的日期记录 - 通过
GROUP BY按时间区间分组,用SUM(SPECIAL_DAY_FLAG)统计该区间内特殊日的总数 - 最后用
HAVING子句过滤出特殊日总数大于14的区间
如果你的表名不是date_ranges和calendar,替换成实际表名即可。
内容的提问来源于stack exchange,提问作者Grigory P
相关产品推荐
相关产品推荐

