SQL

DISTINCT ON : dernière ligne par clé en une passe

Spécifique PostgreSQL : DISTINCT ON garde la première ligne de chaque groupe selon l'ORDER BY — souvent plus rapide que ROW_NUMBER avec le bon index.

Cas d'usage

Dernier événement par utilisateur, dernier prix par instrument, dernier statut par dossier.

Prérequis

PostgreSQL — ROW_NUMBER() = 1 sur les autres moteurs

SQL
SELECT DISTINCT ON (user_id)
    user_id,
    event_type,
    created_at
FROM user_events
ORDER BY user_id, created_at DESC;
-- L'ORDER BY doit commencer par les colonnes du DISTINCT ON
-- Index conseillé : user_events (user_id, created_at DESC)

Résultat

 user_id | event_type  |     created_at
---------+-------------+---------------------
     101 | purchase    | 2026-06-10 11:42:08
     102 | view_page   | 2026-06-10 09:15:33
     103 | add_to_cart | 2026-06-09 22:01:54
     104 | login       | 2026-06-08 07:30:12
(4 rows)   -- exactement 1 ligne par user : son dernier événement
SQLDISTINCT ONPostgreSQLDernière ligne

Snippets liés

Retour au Data Lab