Выберите отличительные для одного столбца и вернуть все остальные столбцы - PullRequest
1 голос
/ 04 октября 2019

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

Я пытался сделать так, как в postgreSQL. select distinct on (orders) * from the table;Но это выдает ошибку в случае mariaDB

Orders          Modified Date
------          ---------------
23031185    2019-09-24 19:36:51
23031185    2019-09-24 22:01:57
23031185    2019-09-24 19:32:28
23031185    2019-09-24 19:33:25
23031185    2019-09-24 19:33:18



The expected output should be the latest one 

Orders          Modified Date
------          ---------------
23031185    2019-09-24 22:01:57

У меня также есть другие столбцы. Мне нужно получить все отдельные строки на основе столбца заказов со всеми другими столбцами.

1 Ответ

1 голос
/ 04 октября 2019

В последних версиях MariaDB вы можете использовать ROW_NUMBER() для ранжирования записей по убыванию modified_date в группах, совместно использующих тот же orders, и затем фильтровать верхнюю запись по группе:

SELECT *
FROM (
    SELECT
        t.*,
        ROW_NUMBER() OVER(PARTITION BY orders ORDER BY modified_date DESC) rn
    FROM mytable t
) x
WHERE rn = 1

В более ранних версиях вы можете использовать коррелированный подзапрос с условием NOT EXISTS:

SELECT *
FROM mytable t
WHERE NOT EXISTS (
    SELECT 1
    FROM mytable t1
    WHERE t1.orders = t.orders AND t1.modified_date > t.modified_date
)

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

SELECT *
FROM mytable t
WHERE modified_date = (
    SELECT MAX(t1.modified_date)
    FROM mytable t1
    WHERE t1.orders = t.orders
)
...