sql >> Database teknologi >  >> RDS >> Mysql

Rækker tæller uden distinkt

Jeg er lidt forvirret, fordi din logik ser ud til at bringe den tidligste besked ikke den seneste.

Selvom distinct on er ret kraftfuld, jeg er ikke sikker på, om du nemt kan få det, du ønsker. Min tilbøjelighed er at skifte til at bruge vinduesfunktioner:

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. Hvordan finder man unikke par fra to kolonner i SQL?

  2. Tilslutning til MySQL fra Eclipse (CDT)

  3. Hvordan gemmer man mere end 255 tegn i MySQL-databasen?

  4. Vis sum nederst i kolonnen i mysql