勘違い PARTITION BY は、行を集約せずに、グループ内の順位や累計を取るためのもの。集約じゃない。GROUP BY とは別物。 救われた瞬間 SELECT id, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn FROM events; これで、ユーザーごとに最新N件、が一発で取れる。