Mysql
 sql >> база данни >  >> RDS >> Mysql

Редовете се броят без различими

Малко съм объркан, защото изглежда, че вашата логика довежда най-ранните съобщение не е последното.

Въпреки че distinct on е доста мощен, не съм сигурен дали можете лесно да получите това, което искате. Склонността ми е да премина към използване на прозоречни функции:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добрият начин за съхраняване на IP в база данни?

  2. Не може да се види mySQL COUNT от 3-та таблица

  3. Как управлявате SQL заявки

  4. проблем с PDO обект

  5. while($row =mysql_fetch_assoc($result)) - Как да предам $row?