Sobes.tech
Middle+
17

SQL задача: вытащить последние N покупок каждого пользователя

Компании, где спрашивали
X5

Ответ от нейросети

sobes.tech AI

Чтобы получить последние N покупок каждого пользователя в SQL, можно использовать оконные функции, например ROW_NUMBER() или RANK(), чтобы пронумеровать покупки по дате в порядке убывания, а затем выбрать первые N для каждого пользователя.

Пример на PostgreSQL:

SELECT * FROM (
  SELECT
    user_id,
    purchase_id,
    purchase_date,
    ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY purchase_date DESC) AS rn
  FROM purchases
) sub
WHERE rn <= N;

Здесь:

  • PARTITION BY user_id группирует данные по пользователям.
  • ORDER BY purchase_date DESC сортирует покупки от новых к старым.
  • ROW_NUMBER() нумерует покупки в каждой группе.
  • Внешний запрос фильтрует только первые N покупок каждого пользователя.

Если N — параметр, его можно подставить в запрос. Такой подход эффективен и поддерживается большинством современных СУБД.