Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wiersze liczą się bez wyraźnych

Jestem trochę zdezorientowany, ponieważ Twoja logika wydaje się wskazywać na najwcześniejsze wiadomość nie najnowsza.

Chociaż distinct on jest dość potężny, nie jestem pewien, czy możesz łatwo dostać to, czego chcesz. Moim zamiarem jest przełączenie się na korzystanie z funkcji 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy MySql 5.0 może mieć widok tabeli znajdującej się na innym serwerze?

  2. Funkcja MySQL CRC32() – Przykłady

  3. Używanie SQLAlchemy ORM dla klucza innego niż podstawowy, unikalny, automatycznie zwiększający się identyfikator

  4. Policz, ile wierszy ma tę samą wartość

  5. Jak uniknąć niepotrzebnych/śmieciowych znaków podczas odczytywania danych z wielu języków?