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

MySQL - Kontrol baris mana yang dikembalikan oleh grup oleh

Ini disebut memilih kolom maksimum berdasarkan grup. Berikut adalah beberapa pendekatan berbeda untuk mysql.

Begini cara saya melakukannya:

SELECT *
FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1
INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id

Ini akan relatif efisien, meskipun mysql akan membuat tabel sementara di memori untuk subquery. Saya berasumsi Anda sudah memiliki indeks di (id, version_id) untuk tabel ini.

Ini adalah kekurangan dalam SQL sehingga Anda kurang lebih harus menggunakan subquery untuk jenis masalah ini ( semi-gabung adalah contoh lain).

Subquery tidak dioptimalkan dengan baik di mysql tetapi subquery yang tidak berkorelasi tidak terlalu buruk selama mereka tidak terlalu besar sehingga akan ditulis ke disk daripada memori. Mengingat bahwa dalam kueri ini hanya memiliki dua int, subkueri dapat menjadi jutaan baris jauh sebelum hal itu terjadi, tetapi subkueri pilih * dalam kueri pertama Anda dapat mengalami masalah ini lebih cepat.



  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:Pilih Entri Acak, tetapi Bobot Menuju Entri Tertentu

  2. Bagaimana Anda bergabung di tabel yang sama, dua kali, di mysql?

  3. Batasan unik yang memungkinkan nilai kosong di MySQL

  4. Cara Mengaktifkan Log Permintaan Lambat MySQL di MySQL

  5. Bagaimana Fungsi LTRIM() Bekerja di MySQL