Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mendapatkan Rekod Kehadiran Terakhir untuk Setiap Ahli dalam MySQL?

Bagaimana untuk Mendapatkan Rekod Kehadiran Terakhir untuk Setiap Ahli dalam MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 12:49:02269semak imbas

How to Retrieve the Last Attendance Record for Each Member in MySQL?

Memilih Nilai Terakhir untuk Setiap Kumpulan Menggunakan MySQL

Pengenalan

Dalam jadual MySQL anda, anda mempunyai data tentang acara kehadiran, dan anda ingin mendapatkan semula kehadiran terakhir yang direkodkan untuk setiap ahli. Walaupun menggunakan klausa GROUP BY, anda menghadapi masalah apabila kehadiran pertama dipilih dan bukannya yang terakhir. Mari kita terokai cara untuk menangani masalah ini.

Menggunakan Subquery dan ORDER BY

Salah satu pendekatan ialah menggunakan subquery dan ORDER BY untuk memilih kehadiran terakhir bagi setiap ahli :

SELECT id_branch_channel, id_member, attendance, timestamp, id_member
FROM (
    SELECT *
    FROM view_event_attendance
    ORDER BY timestamp DESC
) AS t1
WHERE id_event = 782
GROUP BY id_event, id_member;

Pertanyaan ini mendapatkan semula semua baris daripada jadual view_event_attendance, menyusunnya mengikut cap masa dalam tertib menurun (iaitu, terbaharu dahulu), dan kemudian menggunakan subquery sebagai sumber untuk pertanyaan utama. Klausa GROUP BY digunakan untuk mengumpulkan keputusan mengikut ahli dan memilih kehadiran terakhir.

SERTAI dengan Subkueri

Pilihan lain ialah menggunakan JOIN dengan subquery yang mencari cap masa maksimum untuk setiap ahli:

SELECT 
    t1.id_branch_channel,
    t1.id_member, 
    t1.attendance, 
    t1.timestamp,
    t1.id_member
FROM view_event_attendance AS t1
JOIN (
    SELECT id_member, MAX(timestamp) AS max_timestamp
    FROM view_event_attendance
    GROUP BY id_member
) AS t2 ON t1.id_member = t2.id_member AND t1.timestamp = t2.max_timestamp
WHERE t1.id_event = 782;

Dalam pertanyaan ini, jadual view_event_attendance dialiaskan sebagai t1 dan dicantumkan dengan subkueri (alias sebagai t2) yang mengira cap masa maksimum untuk setiap ahli. Syarat JOIN sepadan dengan baris berdasarkan ID ahli dan cap masa maksimum, memastikan hanya kehadiran terakhir untuk setiap ahli disertakan dalam keputusan.

Menggunakan Pengagregatan Tersuai dan Subrentetan

Penyelesaian yang lebih cekap ialah menggunakan pengagregatan tersuai dan subrentetan bukannya subkueri:

SELECT id_branch_channel, id_member, 
    substring(max(concat(from_unixtime(timestamp), attendance)) from 20) as attendance
FROM view_event_attendance
WHERE id_event = 782
GROUP BY id_event, id_member;

Pertanyaan ini menggabungkan cap masa dan kehadiran ke dalam rentetan tunggal untuk setiap baris dan menggunakan max() untuk memilih nilai maksimum dalam setiap kumpulan ahli. Fungsi substring() kemudian mengekstrak bahagian kehadiran rentetan bercantum. Pendekatan ini mengelakkan overhed prestasi yang dikaitkan dengan subkueri.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Kehadiran Terakhir untuk Setiap Ahli dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn