Как найти драйверы, доступные в выбранный интервал? MYSQL - PullRequest
0 голосов
/ 19 июня 2020

У меня две таблицы: драйверы и маршруты. Таблица драйверов состоит из идентификатора драйвера, имени и фамилии, а таблица маршрутов состоит из идентификатора маршрута, идентификатора драйвера, времени начала и времени окончания. Как мне узнать, какие драйверы доступны в течение выбранного временного интервала, например между 25.05.2020 14:00:00 и 29.05.2020 23:00:00?

Я придумал этот код, но он дает мне обратное. Он показывает мне имя и фамилию водителей, которые уже были на маршруте в заданном интервале

select id, name, surname from driver left join route on driver.id=route.driver_id where 5-25-2020 < route.end_time and 5-29-2020 > route.start_time group by 1;

EDIT

driver.id | имя | фамилия

| 1 | name1 | фамилия1

| 2 | name2 | surname2

route.id | route.driver_id | start_time | end_time

| 1 | 1 | 25.05.2020 | 5-29-2020

| 2 | 2 | 5-15-2020 | 5-20-2020

| 3 | ? | 25.05.2020 | 5-29-2020

Я спрашиваю, как выбрать всех драйверов, доступных для идентификатора маршрута 3. Водитель 1 уже находится на маршруте в течение этого времени, поэтому единственным вариантом является идентификатор драйвера 2. Как получить этот драйвер с помощью запроса sql?

1 Ответ

0 голосов
/ 19 июня 2020

Вы можете использовать not exists, чтобы перечислить водителей, у которых нет запланированного маршрута, который перекрывает целевой период:

select d.*
from drivers d
where not exists (
    select 1
    from routes r
    where   
        r.driver_id = d.driver_id 
        and r.start_time < '2020-05-29 23:00:00'
        and r.end_time   > '2020-05-25 14:00:00'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...