MySQL исключает строки подзапроса - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь получить все строки, но избегаю тех, у которых в столбце «статус» есть запись «отъезда».

Я хочу знать, что «поездки» «прибыли» как «статус»но исключите тех, которые уже имеют «уходящий» как «статус».

Я уже пробовал с GROUP BY DISTINCT (без желаемого результата).

База данных:

id  trip    type    status      date
1   1260    ocean   arriving    2019-03-04
2   1260    ocean   departing   2019-03-05
3   1261    ocean   arriving    2019-03-05
4   1262    ocean   arriving    2019-03-05
5   1263    ocean   arriving    2019-03-08
6   1263    ocean   departing   2019-03-09

Запрос:

SELECT * FROM `test` WHERE `status` NOT IN (select `status` FROM `test` WHERE `status` =  'departing')

Result:
                id  trip    type    status      date
                1   1260    ocean   arriving    2019-03-04
                3   1261    ocean   arriving    2019-03-05
                4   1262    ocean   arriving    2019-03-05
                5   1263    ocean   arriving    2019-03-08

Желаемый результат:

                    id  trip    type    status      date
                    3   1261    ocean   arriving    2019-03-05
                    4   1262    ocean   arriving    2019-03-05

Вот скрипта SQL: http://sqlfiddle.com/#!9/9ec331/3

Ответы [ 4 ]

3 голосов
/ 22 марта 2019

Вы можете сделать это с помощью not exists:

select * 
from test t
where status = 'arriving'
  and not exists (select 1 from test
                  where trip = t.trip and status = 'departing')

Я не уверен, что вы хотите, чтобы условие подзапроса могло выглядеть так:

where trip = t.trip and status = 'departing' and date > t.date
1 голос
/ 22 марта 2019

Вы можете использовать столбец 'date' и использовать значение в качестве параметра

SELECT * FROM test WHERE status <> 'departing' and date = '2019-03-05'

См. Этот пример: http://sqlfiddle.com/#!9/9ec331/18

0 голосов
/ 22 марта 2019

Для этого примера я бы сгруппировал результаты во вложенном предложении where. Примерно так:

SELECT * FROM test WHERE status = 'arriving' AND trip IN (SELECT trip FROM test GROUP BY trip HAVING count(trip) = 1);
0 голосов
/ 22 марта 2019

вы можете попробовать этот запрос. он показывает только те строки, в которых номер поездки находится только в 1 строке.

SELECT * FROM `test` WHERE `trip` IN (
  select trip FROM `test` group by trip
  having count(*) = 1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...