Часто нужно выбрать последнее значение для каждой группы (например, последний заказ клиента)?
Вместо
MAX(date) с подзапросами используйте `DISTINCT ON` (в PostgreSQL) или оконные функции. Вариант 1 — PostgreSQL `DISTINCT ON`
SELECT DISTINCT ON (user_id)
user_id, order_id, created_at
FROM orders
ORDER BY user_id, created_at DESC;
Берёт по одной строке на user_id, оставляя самую свежую по дате.
Вариант 2 — универсальный (SQL Server, MySQL 8+, Oracle)
WITH ranked AS (
SELECT
user_id,
order_id,
created_at,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn
FROM orders
)
SELECT user_id, order_id, created_at
FROM ranked
WHERE rn = 1;
📌 Работает во всех СУБД с оконными функциями — гибко и читаемо.
@databases_tg