Mengekstrak Rekod Pertama untuk Setiap ID Unik, Mengendalikan Tarikh Pendua
Bayangkan jadual (mari kita panggilnya MyTable
) dengan lajur: key_id
, id
, record_date
dan lajur lain (other_cols
). Matlamatnya adalah untuk menentukan baris yang mengandungi record_date
terawal untuk setiap id
unik.
Kaedah standard selalunya menganggap nilai record_date
unik, tetapi data kami mungkin mempunyai pendua. Pertanyaan rumit menggunakan subqueries dan join boleh membawa kepada hasil yang tidak perlu.
Pendekatan yang lebih diperkemas menggunakan subkueri:
<code class="language-sql">SELECT mt.* FROM MyTable mt INNER JOIN ( SELECT id, MIN(record_date) AS MinDate FROM MyTable GROUP BY id ) t ON mt.id = t.id AND mt.record_date = t.MinDate;</code>
Subkueri dalaman cekap mencari record_date
(MinDate
) yang paling awal untuk setiap id
dengan mengumpulkan data. Pertanyaan luar kemudiannya menggabungkan hasil ini kembali ke jadual asal (MyTable
), hanya memilih baris yang record_date
sepadan dengan tarikh minimum yang terdapat dalam subkueri. Ini dengan berkesan mendapatkan semula rekod paling awal untuk setiap id
unik, mengendalikan tarikh pendua dengan anggun dan mengelakkan data berlebihan.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Rekod Terawal untuk Setiap ID Berbeza dalam Jadual dengan Pendua Tarikh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!