Mendapatkan semula Lokasi Bersejarah Menggunakan Tarikh MAX dalam Penyata Sertaan
Apabila mengambil lokasi bersejarah untuk ID rekod tertentu, pengguna menghadapi masalah prestasi dan entri pendua dalam keputusan. Pengguna cuba menangani perkara ini dengan menyertai berbilang jadual dan menapis mengikut receive_id, tetapi output yang dijangkakan tidak tercapai.
Untuk menyelesaikannya, disyorkan untuk mengubah suai pertanyaan seperti berikut:
SELECT t1.received_id , t1.transaction_id , t1.date_modified , l.location FROM transactions t1 JOIN ( SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record ON max_record.received_id = t1.received_id AND max_record.maxmodify = t1.date_modified JOIN locations l ON l.location_id = t1.location_id JOIN received r ON r.received_id = t1.received_id WHERE t1.received_id = '1782' ORDER BY t1.date_modified DESC
Perubahan utama melibatkan penyertaan jadual urus niaga dua kali: Sekali untuk pertanyaan utama dan sekali dalam subkueri untuk mencari nilai date_modified maksimum untuk setiap received_id. Subquery ini kemudiannya digunakan untuk menapis pertanyaan utama dan hanya mengembalikan baris dengan nilai date_modified terkini.
Inti teknik ini terkandung dalam corak umum berikut:
SELECT x.* FROM my_table x JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y ON y.id = x.id AND y.max_thing = x.thing;
Ini pendekatan berkesan menghapuskan entri pendua dan memberikan hasil yang diingini iaitu memaparkan hanya masa terkini yang diubah suai untuk setiap ID rekod dan lokasi.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Lokasi Bersejarah Terkini dengan Cekap untuk ID Rekod Diberi Menggunakan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!