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

Ссылка скопирована
1 ответ

Задача такая необходимо сделать выборку по самой новой дате каждого поля
Данные таблицы 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

Дополнительно:

Если текущая версия СУБД поддерживает оконные функции - то 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

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     )

SELECT t1.* FROM table t1 NATURAL JOIN ( SELECT list_name, MAX(date) date FROM table GROUP BY 1 )

Оба запроса предполагают уникальность (list_name, date).

Если записи последовательны (то есть поле с максимальной датой и пишется последним), а id - это autoincrement, можно обойтись простым

SELECT MAX(`id`), `list_name`, MAX(`date`) FROM `LOG` GROUP BY `list_name`

SELECT MAX(`id`), `list_name`, MAX(`date`) FROM `LOG` GROUP BY `list_name`

  • Почему то не работает(

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

  • lyonku, работает. Просто какой-то идиот у вас в PRICE_LIST_NAME пишет полтора поля, зачем-то прилепляя к названию дату из соседнего столбца.
  • Adamos, Спасибо, очень выручили)
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Для выполнения SQL выборки по максимальной дате, можно воспользоваться функцией MAX() в сочетании с GROUP BY. Вот пример запроса на языке SQL:

SELECT column1, column2, MAX(date_column) AS max_date
FROM your_table
GROUP BY column1, column2;

SELECT column1, column2, MAX(date_column) AS max_date FROM your_table GROUP BY column1, column2;

В этом запросе замените column1, column2 и date_column на соответствующие названия столбцов в вашей таблице. Функция MAX() будет находить максимальное значение даты в столбце date_column для каждой комбинации значений column1 и column2.

Если вам нужно получить только одну строку с максимальной датой, то запрос можно упростить, используя подзапрос в сочетании с функцией MAX(). Вот пример:

SELECT column1, column2, date_column
FROM your_table
WHERE date_column = (SELECT MAX(date_column) FROM your_table);

SELECT column1, column2, date_column FROM your_table WHERE date_column = (SELECT MAX(date_column) FROM your_table);

Этот запрос вернет только одну строку с максимальной датой из столбца date_column.

Убедитесь, что замените your_table на имя вашей таблицы и соответствующие названия столбцов. Таким образом, вы сможете выполнить SQL выборку по максимальной дате в вашей базе данных.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно