Как сделать 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
Дополнительно:
Если текущая версия СУБД поддерживает оконные функции - то 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`
- Почему то не работает(
- lyonku, работает. Просто какой-то идиот у вас в PRICE_LIST_NAME пишет полтора поля, зачем-то прилепляя к названию дату из соседнего столбца.
- Adamos, Спасибо, очень выручили)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для выполнения SQL выборки по максимальной дате, можно воспользоваться функцией MAX() в сочетании с GROUP BY. Вот пример запроса на языке SQL:
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);
Этот запрос вернет только одну строку с максимальной датой из столбца date_column.
Убедитесь, что замените your_table на имя вашей таблицы и соответствующие названия столбцов. Таким образом, вы сможете выполнить SQL выборку по максимальной дате в вашей базе данных.