выбрать уникальные записи с датами изменения патча рейса - PullRequest
0 голосов
/ 10 января 2020

У меня есть таблица, которая содержит данные, подобные приведенным ниже (упрощенно)

+-----------+----------------------------+----------------------------+--------------+----------------+
| voyage_id | voyage_start_at            | voyage_end_at              | dest_city_id | depart_city_id |
+-----------+----------------------------+----------------------------+--------------+----------------+
|         3 | 2020-01-06 09:00:00.000000 | 2020-01-07 09:00:00.000000 |        21761 |           1778 |
|         2 | 2020-01-05 09:00:00.000000 | 2020-01-06 09:00:00.000000 |         1778 |           1680 |
|         2 | 2020-01-04 09:00:00.000000 | 2020-01-05 09:00:00.000000 |         1778 |           1680 |
|         2 | 2020-01-03 09:00:00.000000 | 2020-01-04 09:00:00.000000 |         1778 |           1680 |
|         2 | 2020-01-02 09:00:00.000000 | 2020-01-03 09:00:00.000000 |         1778 |           1680 |
|         1 | 2020-01-01 09:00:00.000000 | 2020-01-02 09:00:00.000000 |         1680 |           1677 |
|         1 | 2020-01-01 00:00:00.000000 | 2020-01-01 09:00:00.000000 |         1680 |           1677 |
+-----------+----------------------------+----------------------------+--------------+----------------+

Важные вещи:

  1. voyage_start_at дата такая же, как в предыдущем рейсе voyage_end_at
  2. voyage_id одинаково для каждой строки, где город назначения и отправления совпадают (рейс может быть разбит на несколько строк

Что я хочу получить от список путешествий из города в город с датами voyage_start_at от первой записи рейса и voyage_end_at от последней записи рейса, поэтому этот пример должен выглядеть так:

+-----------+----------------------------+----------------------------+--------------+----------------+
| voyage_id | voyage_start_at            | voyage_end_at              | dest_city_id | depart_city_id |
+-----------+----------------------------+----------------------------+--------------+----------------+
|         3 | 2020-01-06 09:00:00.000000 | 2020-01-07 09:00:00.000000 |        21761 |           1778 |
|         2 | 2020-01-02 09:00:00.000000 | 2020-01-06 09:00:00.000000 |         1778 |           1680 |
|         1 | 2020-01-01 00:00:00.000000 | 2020-01-02 09:00:00.000000 |         1680 |           1677 |
+-----------+----------------------------+----------------------------+--------------+----------------+

Я считаю, что это можно получить по запросу MySQL, поэтому я пытался получить это, используя DISTINCT, JOIN и подзапрос, но я не получил его вообще. Теперь мне просто интересно, что можно сделать с помощью SQL или, может быть, я должен получить RAW-данные из базы данных и преобразовать их для своих нужд (я использую PHP и TWIG).

Буду благодарен за любые полезные советы и идеи.

1 Ответ

1 голос
/ 10 января 2020

Вы можете просто использовать агрегацию здесь:

select
    voyage_id,
    min(voyage_start_at) voyage_start_at,
    max(voyage_end_at) voyage_end_at,
    dest_city_id,
    depart_city_id 
from mytable
group by voyage_id, dest_city_id, depart_city_id 

Демонстрация на DB Fidddle :

voyage_id | voyage_start_at     | voyage_end_at       | dest_city_id | depart_city_id
--------: | :------------------ | :------------------ | -----------: | -------------:
        3 | 2020-01-06 09:00:00 | 2020-01-07 09:00:00 |        21761 |           1778
        2 | 2020-01-02 09:00:00 | 2020-01-06 09:00:00 |         1778 |           1680
        1 | 2020-01-01 00:00:00 | 2020-01-02 09:00:00 |         1680 |           1677
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...