Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Baris dihitung tanpa perbedaan

Saya agak bingung, karena logika Anda akan muncul untuk membawa paling awal pesan bukan yang terbaru.

Meskipun distinct on cukup kuat, saya tidak yakin apakah Anda dapat dengan mudah mendapatkan apa yang Anda inginkan. Kecenderungan saya adalah beralih menggunakan fungsi jendela:

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. Pengguna dan kata sandi mysql yang di-hardcode di Node.js

  2. Bagaimana cara mengatur zona waktu MySQL?

  3. Menyimpan gambar di database mysql

  4. Bagaimana cara mengulang fungsi tersimpan di MySQL dengan benar?

  5. PDOSstatement - Gunakan aksen kuburan (`) di kolom?