Bagaimana untuk Mendapatkan Kehadiran Terkini untuk Setiap Ahli dalam MySQL?

Linda Hamilton
Lepaskan: 2024-11-01 04:35:28
asal
501 orang telah melayarinya

How to Retrieve the Most Recent Attendance for Each Member in MySQL?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!