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

SQL:kelompokkan dari tabel lain dan balikkan hasilnya

Sangat sederhana dan cepat dalam PostgreSQL dengan DISTINCT ON - bukan SQL standar sehingga tidak tersedia di setiap RDBMS.

Pertanyaannya tidak menyebutkannya, tetapi berasal dari contoh kode itu sebenarnya mencari baris dengan "tanggal terakhir" untuk setiap penerima untuk author yang diberikan .

SELECT DISTINCT ON (r.recipient)  m.*
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
ORDER  BY r.recipient, m.date DESC, r.m_id -- to break ties

Detail serta beberapa alternatif standar SQL di sini:
Pilih baris pertama di setiap grup GROUP BY?

Solusi lain dengan SQL standar dan dasar. Bekerja dengan setiap RDBMS utama, termasuk MySQL (karena tag itu telah ditambahkan):

SELECT m.* 
FROM   message   m
JOIN   recipient r ON r.m_id = m.id
WHERE  m.author = 1
AND NOT EXISTS (
   SELECT 1
   FROM   message   m1
   JOIN   recipient r1 ON r1.m_id = m1.id
   WHERE  r1.recipient = r.recipient 
   AND    m1.author = 1
   AND    m1.date > m.date
   )

Hanya baris dengan tanggal terbaru yang melewati NOT EXISTS anti-semi-gabung.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Hitung perbedaan waktu bersih antara dua tanggal-waktu sambil mengecualikan istirahat?

  2. MySQL group_concat() memesan berdasarkan nilai pernyataan kasus

  3. MySQL Tingkat Lanjut:Temukan korelasi antara tanggapan jajak pendapat

  4. memperbarui catatan dengan pernyataan yang disiapkan, memeriksa apakah pembaruan berhasil

  5. Injeksi SQL, Kutipan, dan PHP