Rumah > Soal Jawab > teks badan
P粉6383439952023-08-24 09:47:12
Keutamaan saya adalah menggunakan kod sesedikit mungkin...
Anda boleh melakukan ini menggunakan IN
Cuba ini:
SELECT * FROM t1 WHERE (id,rev) IN ( SELECT id, MAX(rev) FROM t1 GROUP BY id )
Pada pendapat saya, ia kurang kompleks... lebih mudah dibaca dan diselenggara.
P粉5174756702023-08-24 09:16:15
Apa yang anda perlukan hanyalah klausa dengan MAX
聚合函数的 GROUP BY
:
SELECT id, MAX(rev) FROM YourTable GROUP BY id
Saya baru perasan bahawa anda juga memerlukan content
lajur.
Ini adalah masalah yang sangat biasa dalam SQL: cari semua data untuk baris dengan beberapa nilai maksimum dalam setiap lajur pengecam kumpulan. Saya sering mendengar kenyataan ini dalam kerjaya saya. Sebenarnya, ini adalah salah satu soalan yang saya jawab dalam temuduga teknikal di tempat kerja saya sekarang.
Malah, komuniti Stack Overflow mencipta teg untuk mengendalikan soalan seperti ini: terhebat-n-per-kumpulan.
Pada asasnya, anda mempunyai dua cara untuk menyelesaikan masalah ini:
group-identifier, max-value-in-group
subquery joinDalam pendekatan ini anda mula-mula mencari group-identifier, max-value-in-group
(上面已解决)。然后,将表连接到子查询,并在 group-identifier
和 max-value-in-group
dalam subkueri (diselesaikan di atas). Kemudian, sertai jadual ke subkueri dan jadikan ia sama pada
maks-nilai-dalam-kumpulan
: SELECT a.id, a.rev, a.contents FROM YourTable a INNER JOIN ( SELECT id, MAX(rev) rev FROM YourTable GROUP BY id ) b ON a.id = b.id AND a.rev = b.rev
group-identifier
Dalam kaedah ini anda meninggalkan sertai jadual dengan dirinya sendiri. Kesaksamaan wujud dalam
NULL
(这是一个 LEFT JOIN
Apabila anda melakukan langkah 1, baris yang sebenarnya mempunyai nilai terbesar akan ditunjukkan di sebelah kanan Jadi anda akan mendapat:
SELECT a.* FROM YourTable a LEFT OUTER JOIN YourTable b ON a.id = b.id AND a.rev < b.rev WHERE b.id IS NULL;
Kedua-dua kaedah akan membawa hasil yang sama.
group-identifier
具有 max-value-in-group
Jika anda mempunyai dua baris
Kedua-dua kaedah ini serasi dengan SQL ANSI, jadi ia akan berfungsi dengan RDBMS kegemaran anda tanpa mengira "rasa"nya.
Kedua-dua pendekatan juga mesra prestasi, tetapi situasi anda mungkin berbeza (RDBMS, struktur pangkalan data, indeks, dll.). Jadi apabila anda memilih satu kaedah berbanding kaedah yang lain, Tanda Aras
. Dan pastikan anda memilih yang paling sesuai untuk anda. 🎜