Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Rekod Terkini dengan Cekap untuk Setiap Pengguna dalam Pangkalan Data?

Bagaimana untuk Memilih Rekod Terkini dengan Cekap untuk Setiap Pengguna dalam Pangkalan Data?

Barbara Streisand
Lepaskan: 2025-01-13 12:56:44
asal
543 orang telah melayarinya

How to Efficiently Select the Most Recent Record for Each User in a Database?

Mendapatkan Rekod Terkini untuk Setiap Pengguna

Tugas pangkalan data yang kerap melibatkan pemilihan entri terbaharu untuk setiap pengguna unik. Pertimbangkan jadual lms_attendance, yang menjejaki masa daftar masuk dan daftar keluar pengguna.

Cabaran: Mencari Penyertaan Terkini

Struktur jadual lms_attendance ialah:

id user time io
1 9 1370931202 out
2 9 1370931664 out
3 6 1370932128 out
4 12 1370932128 out
5 12 1370933037 in

Matlamat kami adalah untuk menjana pertanyaan yang hanya mengembalikan rekod terkini untuk setiap pengguna, dengan tepat menggambarkan status io semasa mereka (masuk atau keluar).

Pendekatan Mudah (Tetapi Cacat)

Pendekatan naif mungkin:

<code class="language-sql">select 
    `lms_attendance`.`id` AS `id`,
    `lms_attendance`.`user` AS `user`,
    max(`lms_attendance`.`time`) AS `time`,
    `lms_attendance`.`io` AS `io` 
from `lms_attendance` 
group by 
    `lms_attendance`.`user`, 
    `lms_attendance`.`io`</code>
Salin selepas log masuk

Ini, bagaimanapun, menghasilkan keputusan yang salah:

id user time io
3 6 1370932128 out
1 9 1370931664 out
5 12 1370933037 in
4 12 1370932128 out

time adalah betul, tetapi status io tidak selalu dikaitkan dengan cap waktu terbaharu.

Penyelesaian Berkesan: Menggunakan Subkueri

Penyelesaian terletak pada menggunakan subkueri untuk mengenal pasti time maksimum untuk setiap pengguna. Pertanyaan yang dipertingkatkan ialah:

<code class="language-sql">SELECT t1.*
FROM lms_attendance t1
WHERE t1.time = (SELECT MAX(t2.time)
                 FROM lms_attendance t2
                 WHERE t2.user = t1.user)</code>
Salin selepas log masuk

Pertanyaan ini menggabungkan jadual dengan cekap dengan subkueri yang mencari time maksimum untuk setiap pengguna. Hanya rekod yang sepadan dengan cap masa terkini dipilih, memastikan status io tepat untuk setiap entri terkini pengguna.

Ringkasan

Subkueri ialah alat yang berkuasa untuk mendapatkan semula data yang kompleks. Contoh ini menunjukkan keberkesanannya dalam memilih rekod terkini bagi setiap pengguna unik dengan cekap, teknik yang berharga untuk analisis dan pelaporan data.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Rekod Terkini dengan Cekap untuk Setiap Pengguna dalam Pangkalan Data?. 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