MySQL:获取具有开始日期和结束日期的每日项目计数

问题描述 投票:0回答:1

我的表格中确实有旅行,其中有开始日期和结束日期,例如

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   2026-06-02

等等。我现在需要的是每天的游览次数,即使这一天没有游览。我的查询有几个问题:

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;

我看到的 3 个问题是:

  1. 仅考虑 start_date。由于旅行可能持续超过一天,这会造成错误计数
  2. 如果当天有游览,则仅创建一行。如果某天没有任何游览,则不会为这一天创建任何行。
  3. start_date 早于日期范围的游览不予考虑(例如,于 2025 年 5 月 31 日开始但于 2025 年 6 月 2 日结束的游览)。

完美的结果是这样的:

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
表,其中每一天都由一行表示。

感谢您的帮助和最诚挚的问候

mysql date count
1个回答
0
投票

SELECT date, (SELECT COUNT(id) FROM tour WHERE tour.start_date <= day.date AND tour.end_date >= day.date) AS numberOfTours FROM day WHERE date > '2025-07-01' AND date < '2025-07-31' ORDER BY date;

很简单:)

© www.soinside.com 2019 - 2024. All rights reserved.