sql >> Databáze >  >> RDS >> Mysql

Řádky se počítají bez rozdílu

Jsem trochu zmatený, protože se zdá, že vaše logika přináší nejstarší zpráva není nejnovější.

Ačkoli distinct on je docela výkonný, nejsem si jistý, jestli můžete snadno získat to, co chcete. Chci přejít na používání funkcí okna:

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. Jak používat Průvodce importem/exportem v SQL Server - SQL Server / Výukový program TSQL, část 104

  2. PostgreSQL unnest() s číslem prvku

  3. Jak udržet jednu instanci připojení SQL Server otevřenou pro více požadavků v C#?

  4. Jak aktualizovat databázi mysql bez opětovného načtení stránky