【发布时间】:2017-06-22 21:20:12
【问题描述】:
如何让 sql 查询在 mysql 中的某个日期范围内为每一天返回一行?
我有一个具有这种结构的工作表:
job_id | station_id | start_date | end_date |
--------+---------------+---------------+---------------+
1 | 1 | 2017-06-01 | 2017-06-02 |
2 | 2 | 2017-06-01 | 2017-06-03 |
3 | 1 | 2017-06-02 | 2017-06-04 |
4 | 4 | 2017-06-01 | 2017-06-02 |
5 | 2 | 2017-06-04 | 2017-06-05 |
6 | 1 | 2017-06-06 | 2017-06-08 |
7 | 3 | 2017-06-01 | 2017-06-02 |
还有一个站台:
station_id | type |
-----------+------------|
1 | 1 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 2 |
如果我想知道在 2017 年 6 月 1 日使用了多少个类型 2 的站点,我可以很容易地做到这一点:
SELECT COUNT(job_id)
FROM jobs
WHERE start_date <= '2017-06-01'
AND end_date > '2017-06-01'
AND station_id IN (SELECT station_id FROM station WHERE type = 2);
这个例子告诉我们有 2 个站(3 和 4)正在使用:
+-------------+
|COUNT(job_id)|
+-------------+
| 2 |
+-------------+
但是,我希望这样可以为日期范围内的每一天返回一行。
到目前为止,我已经用一个多次运行第一个查询的 python 脚本解决了这个问题,有没有办法直接用 mysql 来解决这个问题?
编辑:根据 user1960808 的要求,范围 2017-06-01 2017-06-03 和类型 2 的预期结果将是:
+-----------+-------------+
| date |COUNT(job_id)|
+-----------+-------------+
|2017-06-01 | 2 |
|2017-06-02 | 0 |
|2017-06-03 | 0 |
+-----------+-------------+
【问题讨论】: