PostgreSQL | Как получить самую старую запись из таблицы?

PostgreSQL | Как получить самую старую запись из таблицы?

Предполагается, что у нас есть какая-то таблица. В ней есть столбец с ДАННЫМИ, а также столбец с ДАТАМИ добавления (или обновления) этих данных.

Пример таблицы для теста:

-- DROP TABLE test1.olddate;

-- Создаём таблицу
CREATE TABLE test1.olddate (
   xname text,
   xdate timestamp without time zone
);

-- Наполняем данными
INSERT INTO test1.olddate VALUES ('Иван', '2022-07-25 11:49:55.345867');
INSERT INTO test1.olddate VALUES ('Максим', '2022-07-25 11:49:55.345867');
INSERT INTO test1.olddate VALUES ('Николай', '2022-06-25 11:49:55.345867');
INSERT INTO test1.olddate VALUES ('Сергей', '2022-04-25 11:49:55.345867');
INSERT INTO test1.olddate VALUES ('Дмитрий', '2022-08-25 11:49:55.345867');

-- Выводим таблицу для ознакомления
SELECT * FROM test1.olddate;

 

Итоговый вид таблицы:

Таблица с разными датами и данными на 5 записей - PostgreSQL
Таблица с разными датами и данными на 5 записей — PostgreSQL

Нашу задачу нужно разделить на две отдельные задачи:

  1. Сначала мы находим самую старую дату в таблице в нужном столбце
  2. Затем используем полученное значение в качестве условия WHERE для основного запроса к таблице

 

Решение

Получаем самую старую дату:

-- Получение самой старой даты
SELECT min(xdate) FROM test1.olddate;
Получили самое старое значение даты по столбцу xdate нашей таблицы на 5 записей - PostgreSQL
Получили самое старое значение даты по столбцу xdate нашей таблицы на 5 записей — PostgreSQL

 

Для этого мы используем агрегатную функцию MIN() в которую мы передаём наш столбец с датами, который называется xdate. Данная выборка вернёт нам самую старую дату из всех возможных в столбце.

Теперь мы можем использовать последний ЗАПРОС в качестве ПОДЗАПРОСА:

-- Получение записи с самой старой датой
SELECT * FROM test1.olddate 
WHERE xdate = (SELECT min(xdate) FROM test1.olddate);
Получили запись с самой старой датой в таблице на 5 записей - PostgreSQL
Получили запись с самой старой датой в таблице на 5 записей — PostgreSQL

 

Несколько одинаковых «старых» дат

Может возникнуть такая ситуация, когда в таблице окажется несколько записей с одной и той же «старой» датой. Чтобы получить какую-либо одну из них, можно просто ограничить выборку лимитом:

SELECT *
FROM test1.olddate
WHERE xdate = (SELECT min(xdate) FROM test1.olddate)
LIMIT 1;

Данная команда предотвратит риск множественных результатов, если нужен только один.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Раздел «8.5. Типы даты/времени» — https://postgrespro.ru/docs/postgresql/14/datatype-datetime

Раздел «9.9.5. Текущая дата/время» — https://postgrespro.ru/docs/postgresql/14/functions-datetime#FUNCTIONS-DATETIME-CURRENT

PostgreSQL | Текущая ДАТА и ВРЕМЯ при добавлении записи в таблицу