sql запрос для отображения тех, у кого 0 - PullRequest
1 голос
/ 20 февраля 2020

Мне нужно показать водителей и количество поездок в январе 2019 года. Мне также нужно показать тех, у кого 0 поездок в январе 2019 года. Ниже приведен запрос, но он не показывает мне тех, у кого было 0 поездок в январе 2019 года.

select d.driver_id, count (t.trip_id)
from drivers d left join  TRIPS t on t.DRIVER_ID = d.DRIVER_ID
left join TRIPS_PICKUP tp on tp.DESTINATION_ID = t.DESTINATION_ID
left join TRIP_ADDRESS ta on tp.DESTINATION_ID = ta.DESTINATION_ID
where t.TRIP_DATE>=to_date('2019/01/01','yyyy/mm/dd') and 
t.TRIP_DATE<=TO_DATE('2019/01/31','yyyy/mm/dd')
group by d.DRIVER_ID

Я думаю, что есть проблема в где-то, но я не могу ее найти. Я использую oracle sql разработчик

1 Ответ

4 голосов
/ 20 февраля 2020

Переместите условие в предложение on и используйте литералы даты:

select d.driver_id, count (t.trip_id)
from drivers d left join
     TRIPS t 
     on t.DRIVER_ID = d.DRIVER_ID and
        t.TRIP_DATE >= date '2019-01-01' and
        t.TRIP_DATE < date '2019-02-01' left join
     TRIPS_PICKUP tp
     on tp.DESTINATION_ID = t.DESTINATION_ID left join
     TRIP_ADDRESS ta
     on tp.DESTINATION_ID = ta.DESTINATION_ID
group by d.DRIVER_ID;

Обратите внимание, что я изменил верхние пределы для сравнения дат - меньше, чем первое января. Это особенно важно в Oracle, потому что даты могут содержать компонент времени, даже если вы не видите его при запросе к таблице. Эта версия безопасна для данных с или без компонента времени.

...