代码之家  ›  专栏  ›  技术社区  ›  efex09

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

  •  0
  • efex09  · 技术社区  · 7 年前

    SQL Fiddle Schema

    日期范围所需的输出 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-01-05,我们有两辆车可用,因为2019-01-01上的两辆车现在可用,所以2-0=2

    我正在使用MySQL 8

    1 回复  |  直到 7 年前
        1
  •  0
  •   Gordon Linoff    7 年前

    其次,要生成日期和汽车的所有组合。然后数一数每天的预订数量,并从中减去这个数字:

    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;