Выберите самую последнюю дату для группы, но группировка должна выполняться в последовательные даты - PullRequest
0 голосов
/ 04 сентября 2018

Как можно сгруппировать соседние строки по значениям одного столбца, чтобы возвращалась только самая последняя из этих сгруппированных строк?

Данные внутри travel Таблица

id   name    location    date
--------------------------------------------
1    name    London      2018-09-01 00:00:00
2    name    London      2018-09-02 00:00:00
3    name    NYC         2018-09-03 00:00:00
4    name    London      2018-09-04 00:00:00
5    name    NYC         2018-09-05 00:00:00
6    name    NYC         2018-09-06 00:00:00
7    name    Tokyo       2018-09-07 00:00:00

Результат (с обратным порядком)

7    name    Tokyo       2018-09-07 00:00:00
6    name    NYC         2018-09-06 00:00:00
4    name    London      2018-09-04 00:00:00
3    name    NYC         2018-09-03 00:00:00
2    name    London      2018-09-02 00:00:00

Скрипка, с которой можно поиграть: http://sqlfiddle.com/#!9/02033ba/15

1 Ответ

0 голосов
/ 05 сентября 2018

Используя двойной NOT EXISTS. Проще говоря, выберите все строки, за исключением тех, где в будущем существует то же местоположение, а между ними нет другого местоположения.

SELECT *
FROM travel curr
WHERE NOT EXISTS (
    SELECT 1
    FROM travel next
    WHERE next.name = curr.name
    AND next.location = curr.location
    AND next.date > curr.date
    AND NOT EXISTS (
        SELECT 1
        FROM travel inbw
        WHERE inbw.name = curr.name
        AND inbw.location <> curr.location
        AND inbw.date > curr.date
        AND inbw.date < next.date
    )
)
ORDER BY date DESC

Пересмотренная скрипта SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...