Anda cuba mendapatkan semula kedudukan terbaharu untuk setiap keselamatan daripada jadual tertentu. Untuk mencapai matlamat ini, anda boleh menggunakan pertanyaan berikut:
SELECT p1.id, p1.security, p1.buy_date FROM positions p1 LEFT JOIN positions p2 ON p1.security = p2.security AND p1.buy_date < p2.buy_date WHERE p2.id IS NULL;
Dalam pertanyaan ini, gabungan kiri digunakan untuk membandingkan setiap baris dalam jadual kedudukan dengan setiap baris lain dengan keselamatan yang sama. Lajur tarikh_beli digunakan untuk menentukan baris mana yang paling terkini. Klausa WHERE kemudiannya menapis mana-mana baris yang bukan yang paling terkini untuk keselamatan masing-masing.
Hasil pertanyaan ini akan menjadi jadual dengan satu baris untuk setiap keselamatan, yang mengandungi id, keselamatan dan keselamatan terkini. buy_date untuk keselamatan itu.
Pertanyaan ini lebih cekap daripada pendekatan berasaskan subkueri yang anda cuba sebelum ini kerana ia tidak memerlukan berbilang laluan melalui jadual kedudukan. Sebaliknya, ia menggunakan gabungan tunggal untuk mengenal pasti baris terbaharu bagi setiap keselamatan, menjadikannya lebih pantas untuk set data yang besar.
Atas ialah kandungan terperinci Bagaimana Mencari Kedudukan Terkini dengan Cekap untuk Setiap Keselamatan dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!