Saya melakukan jenis kueri ini secara berbeda, dengan pengecualian bergabung alih-alih subquery. Anda ingin menemukan baris B yang memiliki Waktu maksimum untuk ID yang diberikan; dengan kata lain, di mana tidak ada baris lain yang memiliki Waktu lebih besar dan ID yang sama.
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL
Anda juga dapat menggunakan tabel turunan , yang seharusnya berkinerja lebih baik daripada menggunakan subkueri yang berkorelasi.
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
ON (B.ID, B.Time) = (B2.ID, B2.Time)
P.S.:Saya telah menambahkan greatest-n-per-group
menandai. Jenis pertanyaan SQL ini muncul setiap minggu di Stack Overflow, jadi Anda dapat mengikuti tag tersebut untuk melihat lusinan pertanyaan serupa dan jawabannya.