Я хочу, чтобы для данного диапазона времени даты было получено:
- Название аэропорта,
- Количество рейсов в этом аэропорту (количество раз, когда этот аэропорт прибывает в аэропорт при полете, в то время какДата отправления того же рейса находится в указанном диапазоне дат / времени),
- Количество проданных билетов этого аэропорта (dateOfSale должен быть в указанном диапазоне дат-времени) и
- Общая стоимость проданных билетовэтого аэропорта.
У меня есть 3 таблицы (аэропорт, рейс и билет):
Airport data:
id | name
1 , Madrid Airport
2 , Amsterdam Airport
3 , Belgrade Airport
----------------------------------------------
Flight data:
id | number | departureDate | arrivalDate | departureAirport | arrivalAirport | price
1 , 101 ,2019-01-29 19:21:44,2019-01-29 22:21:44, Madrid Airport , Amsterdam Airport, 600
2 , 102 ,2019-01-29 22:21:44,2019-01-30 00:21:44, Madrid Airport , Belgrade Airport , 450
3 , 103 ,2019-01-30 20:21:44,2019-01-30 22:21:44, Belgrade Airport , Amsterdam Airport, 555
4 , 104 ,2019-02-10 20:21:44,2019-02-10 22:21:44, Belgrade Airport , Madrid Airport , 555
----------------------------------------------
Ticket data:
id | FlightId | dateOfSale
1 , 3 , 2019-01-23 00:00:00
2 , 3 , 2019-01-27 10:00:00
3 , 1 , 2019-01-27 13:00:00
Пример диапазона времени и даты:
СПри заданном диапазоне дат и времени только четвертый рейс не пройдет условие, поскольку его дата отправления не находится в заданном диапазоне, остальные три рейса пройдут.
Итак, теперь у нас есть аэропорт Амстердама (x2) и Аэропорт Белграда (x1) какприбытие в аэропорт.Таким образом, первые два столбца должны быть представлены следующим образом:
Name of Airport | Number of Flights |
Amsterdam Airport, 2
Belgrade Airport , 1
Третий столбец представляет количество проданных билетов, в то время как dateOfSale также находится в заданном диапазоне дат / времени.
В таблице билетов продано 3 билетапервые два приобретаются для полета с id = 3, а третий билет покупается для полета с id = 1.Так как dateOfSale первого билета не находится в заданном диапазоне времени / даты, только 2-й и 3-й билеты пройдут , и оба они представляют аэропорт прибытия, называемый Амстердамским аэропортом.
Таким образом, конечный результат должен быть:
Name of Airport | Number of Flights | Number of sold tickets | Total price
Amsterdam Airport, 2 , 2 , 1155
Belgrade Airport , 1 , 0 , 0
Я пробовал что-то вроде этого:
select a.name, count(f.arrivalAirport) as 'number of flights',
count(t.dateOfSale) as 'number of sold tickets', sum(f.price) from airport a,
flight f, ticket t where a.name = f.arrivalAirport and f.departureDate >
'2019-01-25 19:21:44' and f.departureDate < '2019-02-02 00:00:00' and
t.flightId = f.id and t.dateOfSale > '2019-01-25 19:21:44' and t.dateOfSale
< '2019-02-02 00:00:00' group by a.name;
Делая только это, он подсчитывает количество проданных билетов точно так же, как и должен, но количество рейсов неверно.
Я не уверен, что делать дальше.Чего мне не хватает в этом запросе, и можно ли это сделать так, или в него должно быть включено объединение (с которым у меня тоже проблемы)?