Например, взять последние 3 заказа каждого пользователя:
SELECT
u.id,
u.name,
o.id AS order_id,
o.created_at
FROM users u
JOIN LATERAL (
SELECT id, created_at
FROM orders
WHERE orders.user_id = u.id
ORDER BY created_at DESC
LIMIT 3
) o ON TRUE;
Без LATERAL такую задачу часто решают через оконные функции и сначала ранжируют всю таблицу orders.
С LATERAL база может для каждого пользователя сразу сходить по индексу:
CREATE INDEX idx_orders_user_created
ON orders (user_id, created_at DESC);
Особенно полезно для задач вида:
«последние N», «самая дорогая запись», «ближайшее событие», «лучший результат для каждой строки».
Главное: всегда проверяй EXPLAIN ANALYZE — на больших таблицах правильный составной индекс здесь решает всё.