@lyonku

Как сделать SQL выборку по максимальной дате?

Задача такая необходимо сделать выборку по самой новой дате каждого поля
Данные таблицы LOG:
id | list_name | date
1 | log1 | 05.01.2022
2 | log1 | 06.01.2022
3 | log2 | 05.01.2022

Как должно быть:
id | list_name | date
2 | log1 | 06.01.2022
3 | log2 | 05.01.2022
  • Вопрос задан
  • 4297 просмотров
Решения вопроса 2
@Akina
Сетевой и системный админ, SQL-программист.
Если текущая версия СУБД поддерживает оконные функции - то ROW_NUMBER() в CTE и отбор по rn=1 во внешнем запросе.
WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY list_name ORDER BY date DESC) rn
    FROM table
    )
SELECT *
FROM cte
WHERE rn = 1

Если не поддерживает - агрегирующий подзапрос, который для каждой категории получает максимальную дату, и отбор записей по этим значениям из другой копии таблицы.
SELECT t1.*
FROM table t1
NATURAL JOIN (
    SELECT list_name, MAX(date) date
    FROM table
    GROUP BY 1
    )

Оба запроса предполагают уникальность (list_name, date).
Ответ написан
Комментировать
Adamos
@Adamos
Если записи последовательны (то есть поле с максимальной датой и пишется последним), а id - это autoincrement, можно обойтись простым
SELECT MAX(`id`), `list_name`, MAX(`date`) FROM `LOG` GROUP BY `list_name`
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы