sql >> Database teknologi >  >> RDS >> PostgreSQL

Returner poster adskilt på én kolonne, men rækkefølge efter en anden kolonne

DISTINCT ON

Hvis du bruger DISTINCT ON , du skal bruge en underforespørgsel til det:

SELECT *
FROM  (
   SELECT DISTINCT ON (conversation_id) *
   FROM   message t
   ORDER  BY conversation_id, created_at DESC
   ) sub
ORDER BY created_at DESC;

Rækkefølgen i underforespørgslen skal stemme overens med kolonnerne i DISTINCT ON klausul, så du skal pakke den ind i en ydre forespørgsel for at nå frem til din ønskede sorteringsrækkefølge.

Alternativ med row_number()

Lignende historie, du har også brug for en underforespørgsel:

SELECT id, sender_id, receiver_id, conversation_id, subject, body, created_at
FROM  (
   SELECT *, row_number() OVER (PARTITION BY conversation_id
                                ORDER BY created_at DESC) AS rn
   FROM   message t
   ) sub
WHERE  rn = 1
ORDER  BY created_at DESC;

Også sandsynligvis langsommere.




  1. MySQL sporingssystem

  2. Kommentarer til mange tabeller database design problem

  3. lagrede procedurer og mysql_insert_id problem

  4. MySQL aggregeret sum af JSON-objekter