Pilih Hanya Nilai Terkini Menggunakan Kumpulan By dalam MySQL
Apabila cuba mendapatkan kehadiran terkini untuk setiap ahli daripada jadual, anda mungkin menghadapi situasi di mana anda mendapatkan semula kehadiran awal dan bukannya yang terakhir menggunakan pertanyaan GROUP BY simple. Untuk menyelesaikan isu ini, terdapat beberapa pendekatan:
Menggunakan Subquery
Anda boleh menggunakan subquery untuk mencari cap masa maksimum bagi setiap ahli dan kemudian sertai jadual asal pada cap masa itu untuk mendapatkan semula kehadiran yang sepadan:
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM view_event_attendance AS t1 WHERE id_event = 782 AND timestamp = ( SELECT MAX(timestamp) FROM view_event_attendance AS t2 WHERE t1.id_member = t2.id_member AND t1.id_event = t2.id_event GROUP BY id_event, id_member ) OR timestamp IS NULL GROUP BY id_event, id_member;</code>
Menggunakan Jadual Terbitan
Anda boleh mencipta jadual terbitan yang menyusun baris mengikut cap masa dalam tertib menurun dan kemudian gunakan jadual itu sebagai sumber untuk pertanyaan GROUP BY anda:
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM ( SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM view_event_attendance WHERE id_event = 782 ORDER BY timestamp DESC ) AS sorted GROUP BY id_event, id_member;</code>
Menggunakan Fungsi Tetingkap
Anda boleh menggunakan fungsi tetingkap untuk mencari nilai maksimum merentas baris untuk setiap ahli dan kemudian gunakan nilai maksimum itu untuk menapis baris:
<code class="sql">SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM ( SELECT id_branch_channel, id_member, attendance, timestamp, id_member, MAX(timestamp) OVER (PARTITION BY id_event, id_member) AS max_timestamp FROM view_event_attendance WHERE id_event = 782 ) AS subquery WHERE timestamp = max_timestamp GROUP BY id_event, id_member;</code>
Menggunakan Trik Penggabungan Rentetan
Pendekatan ini melibatkan penggabungan cap masa dan kehadiran ke dalam rentetan tunggal dan menggunakan fungsi MAX() untuk mencari rentetan terbesar. Dengan mengekstrak kehadiran daripada rentetan maksimum, anda secara berkesan mendapatkan semula kehadiran terkini:
<code class="sql">SELECT id_branch_channel, id_member, SUBSTR(MAX(CONCAT(FROM_UNIXTIME(timestamp), attendance)), 20) AS attendance, timestamp, id_member FROM view_event_attendance WHERE id_event = 782 GROUP BY id_event, id_member;</code>
Pendekatan terbaik untuk situasi khusus anda bergantung pada ciri prestasi pangkalan data anda dan saiz set data anda.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kehadiran Terkini untuk Setiap Ahli dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!