我想查询每个日期(提供日期范围)和每种车型有多少辆车超额预订。
日期范围 2019-01-01
到 2019-01-06
所需的输出如下。
date ,car , available
2019-01-01,ECONOMY,-1 (cars available - reservation i.e 2 - 3 = -1)
2019-01-02,ECONOMY, 0 (cars available - reservation i.e 0 - 0 = 0)
2019-01-03,ECONOMY, 0 (cars available - reservation i.e 0 - 0 = 0)
2019-01-04,ECONOMY, 0 (cars available - reservation i.e 0 - 0 = 0)
2019-01-05,ECONOMY, 2 (cars available - reservation i.e 2 - 0 = 2)
2019-01-06,ECONOMY, 2 (cars available - reservation i.e 2 - 0 = 2)
说明:
截至 2019 年 1 月 1 日,我们有两辆车可用,预订数量为 3,因此我们超额预订了 1 辆车,即 -1
对于 2019 年 1 月 2 日,我们有 0 辆可用汽车,因为两辆可用汽车在 2019 年 1 月 1 日已经消失,并且预订计数为零,因此 0-0 = 0
对于 2019 年 1 月 05 日,我们有两辆车可用,因为 2019 年 1 月 1 日的两辆车现在可用,所以 2 - 0 = 2
我使用的是 MySQL 8
最佳答案
这个问题的答案有几个部分。首先,您需要构建一个日期列表。您可以使用递归 CTE 来做到这一点。
其次,您想要生成日期和汽车的所有组合。然后计算每天的预订数量,并从计数中减去该数字:
with recursive dates as (
select date('2019-01-01') as dte
union all
select dte + interval 1 day
from dates
where dte < '2019-01-06'
)
select c.name, d.dte,
( c.cnt - count(r.id) ) as cars available
from dates d cross join
cars c left join
reservations r
on c.name = r.car_type and
d.dte >= r.date_out and
d.dte <= r.date_in
group by c.name, d.dte, c.cnt;
关于mysql - 查询每个日期和车型的额外预订数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54826554/