Запросите дополнительное количество бронирований для каждой даты и типа автомобиля - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу узнать, сколько машин перебронировано за каждую дату (с указанием диапазона дат) и по каждому типу машины.

Схема SQL Fiddle

Требуется вывод для диапазона дат 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-01 у нас есть две машины в наличии и количество бронирований равно 3, поэтому мы забронировали 1 машину, т.е. -1

На дату 2019-01-02 у нас есть ноль автомобилей, так как две доступные машины пропали на дату 2019-01-01 и количество резервирований равно нулю, поэтому 0-0 = 0

На дату 2019-01-05 у нас есть две машины, так как две машины, ушедшие на 2019-01-01, доступны сейчас, поэтому 2 - 0= 2

Я использую MySQL 8

1 Ответ

0 голосов
/ 22 февраля 2019

Ответ на этот вопрос состоит из нескольких частей.Для начала нужно составить список дат.Вы можете сделать это с помощью рекурсивного 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...