Dans PostgreSQL, pour obtenir des lignes uniques pour un ensemble défini de colonnes , la technique préférable est généralement DISTINCT ON
:
SELECT DISTINCT ON ("ID") *
FROM "Course"
ORDER BY "ID", "Course Date" DESC NULLS LAST, "Course Name";
Vous obtenez exactement une ligne par ID
de cette façon - celui avec la dernière "Course Date"
connue et le premier "Course Name"
(selon l'ordre de tri) en cas d'ex aequo sur la date.
Vous pouvez supprimer NULLS LAST
si votre colonne est définie NOT NULL
.
Pour obtenir des lignes uniques par ("ID", "Course Name")
:
SELECT DISTINCT ON ("ID", "Course Name") *
FROM "Course"
ORDER BY "ID", "Course Name", "Course Date" DESC NULLS LAST;
Détails dans cette réponse connexe :