查询每个日期和车型的额外预订计数

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

我想查询每个日期(提供日期范围)和每种车型预订的汽车数量。

SQL Fiddle Schema

日期范围2019-01-012019-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-01-01的日期,我们有两辆车可用,预订数为3,所以我们已经预订了1辆车,即-1

对于2019-01-02日期,我们有零汽车可用,因为可用的两辆汽车在2019-01-01日期消失,预订计数为零所以0-0 = 0

对于2019-01-05的日期,我们有两辆车可用,因为2019-01-01的两辆车现已上市,所以2 - 0 = 2

我正在使用MySQL 8

mysql sql
1个回答
0
投票

这个问题的答案有几个部分。首先,您需要构建一个日期列表。你可以使用递归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;
© www.soinside.com 2019 - 2024. All rights reserved.