如何按日统计旅行团数量(含无团日期与跨期团)
旅行团每日数量统计问题
表结构与示例数据
我有一张存储旅行团信息的tour表,包含以下字段:
id:旅行团IDstart_date:行程开始日期end_date:行程结束日期
示例数据如下:
| id | start_date | end_date |
|---|---|---|
| 1 | 2025-06-13 | 2025-06-13 |
| 2 | 2025-06-12 | 2025-06-17 |
| 3 | 2025-06-20 | 2025-06-21 |
| 4 | 2025-05-31 | 2025-06-02 |
需求说明
需要统计指定日期范围内(例如2025-06-01至2025-06-30)每一天的旅行团数量,即使当天没有旅行团也必须生成对应行。
原查询语句及存在的问题
当前使用的查询语句:
SELECT start_date, COUNT(id) AS numberOfTours FROM tour WHERE start_date >= '2025-06-01' AND start_date =< '2025-06-30' GROUP BY start_date ORDER BY start_date;
该语句存在以下三个问题:
- 仅以
start_date为统计依据,未考虑多日行程的旅行团,导致计数不准确; - 仅在当天有旅行团时生成数据行,无团日期无对应记录;
- 未统计起始日期在指定范围外但结束日期在范围内的旅行团(如2025-05-31开始、2025-06-02结束的团)。
期望的理想结果
| date | numberOfTours |
|---|---|
| 2025-06-01 | 1 |
| 2025-06-02 | 1 |
| 2025-06-03 | 0 |
| 2025-06-04 | 0 |
| 2025-06-05 | 0 |
| 2025-06-06 | 0 |
| 2025-06-07 | 0 |
| 2025-06-08 | 0 |
| 2025-06-09 | 0 |
| 2025-06-10 | 0 |
| 2025-06-11 | 0 |
| 2025-06-12 | 1 |
| 2025-06-13 | 2 |
| 2025-06-14 | 1 |
| 2025-06-15 | 1 |
| 2025-06-16 | 1 |
| 2025-06-17 | 1 |
| 2025-06-18 | 0 |
| 2025-06-19 | 0 |
| 2025-06-20 | 1 |
| 2025-06-21 | 1 |
| 2025-06-22 | 0 |
| 2025-06-23 | 0 |
| 2025-06-24 | 0 |
| 2025-06-25 | 0 |
| 2025-06-26 | 0 |
| 2025-06-27 | 0 |
| 2025-06-28 | 0 |
| 2025-06-29 | 0 |
| 2025-06-30 | 0 |
可用辅助资源
另外,我还有一张day表,每行对应一个日期,可用于辅助实现需求。
内容的提问来源于stack exchange,提问作者PhilippG
相关产品推荐
相关产品推荐

