Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

As linhas contam sem distinção


Estou um pouco confuso, porque sua lógica parece trazer o mais cedo mensagem não é a mais recente.

Embora distinct on é bastante poderoso, não tenho certeza se você pode obter facilmente o que deseja. Minha inclinação é mudar para o uso de funções de janela:
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;