gpt4 book ai didi

mysql - 如何使 sql 查询在 mysql 中的日期范围内每天返回一行?

转载 作者:行者123 更新时间:2023-11-29 18:45:41 25 4
gpt4 key购买 nike

如何让 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 |
+-----------+-------------+

最佳答案

也许最简单的方法是生成范围:

select d.dte, count(job_id)
from (select '2017-06-01' as dte union all
select '2017-06-02' as dte
) d left join
jobs j
on j.start_date <= d.dte and j.end_date > d.dte
where j.station_id in (select station_id from station s where s.type = 2)
group by d.dte;

如果您有很多日期,这不是最有效的解决方案。

关于mysql - 如何使 sql 查询在 mysql 中的日期范围内每天返回一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com