sql >> Databasteknik >  >> RDS >> Mysql

Rader räknas utan distinkt

Jag är lite förvirrad, eftersom din logik verkar ge den tidigaste meddelande inte det senaste.

Även om distinct on är ganska kraftfull, jag är inte säker på om du lätt kan få det du vill ha. Min böjelse är att gå över till att använda fönsterfunktioner:

SELECT m.*
FROM (SELECT m.*,
             (CASE WHEN sender_id < recipient_id
                   THEN (sender_id, recipient_id)
                   ELSE (recipient_id, sender_id)
              END) AS pair,
             ROW_NUMBER() OVER (PARTITION BY (CASE WHEN sender_id < recipient_id
                                                   THEN (sender_id, recipient_id)
                                                   ELSE (recipient_id, sender_id)
                                              END)
                                ORDER BY created_at, unread_count DESC
                               ) as seqnum,
             SUM(CASE WHEN m.opened = false THEN 0 ELSE 1 END) OVER
                 (PARTITION BY (CASE WHEN sender_id < recipient_id
                                     THEN (sender_id, recipient_id)
                                     ELSE (recipient_id, sender_id)
                                END)
                 ) as NumUnopened
      FROM "messages" m
      WHERE ((recipient_id = 6 and recipient_delete = false) or 
             (sender_id = 6 and sender_delete = false))  
     ) t
WHERE seqnum = 1;


  1. Spring app tappar anslutningen till MySql efter 8 timmar. Hur konfigurerar man korrekt?

  2. Hur använder man mysql JOIN utan ON-villkor?

  3. Ställa in MySQL-utlösare

  4. Kan Postgres-datatypen NUMERIC lagra signerade värden?