Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Rekod Aktiviti Pengguna Terkini dengan Cekap dengan SQL?

Bagaimana untuk Mendapatkan Rekod Aktiviti Pengguna Terkini dengan Cekap dengan SQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-15 16:51:45241semak imbas

How to Efficiently Retrieve the Latest User Activity Record with SQL?

Gunakan SQL untuk mendapatkan rekod aktiviti pengguna terkini dengan cekap

Artikel ini meneroka cara untuk menanyakan pangkalan data melalui SQL untuk mendapatkan tarikh rekod aktiviti terkini setiap pengguna.

Andaikan kami mempunyai jadual pangkalan data yang merekodkan peristiwa log masuk pengguna:

用户名 日期 数值
brad 2010-01-02 1.1
fred 2010-01-03 1.0
bob 2009-08-04 1.5
brad 2010-02-02 1.2
fred 2009-12-02 1.3

Kaedah mudah:

Pendekatan mudah ialah menggunakan gabungan dalaman untuk memadankan nama pengguna dan tarikh terkini:

<code class="language-sql">select t.username, t.date, t.value
from MyTable t
inner join (
    select username, max(date) as MaxDate
    from MyTable
    group by username
) tm on t.username = tm.username and t.date = tm.MaxDate</code>

Walau bagaimanapun, pendekatan ini mungkin mengalami rekod pendua dengan tarikh yang sama.

Gunakan fungsi tetingkap:

Untuk menyelesaikan masalah rekod pendua, anda boleh menggunakan fungsi tetingkap:

<code class="language-sql">select x.username, x.date, x.value 
from (
    select username, date, value,
        row_number() over (partition by username order by date desc) as _rn
    from MyTable 
) x
where x._rn = 1</code>

Pertanyaan ini menggunakan pembahagian baris dan fungsi ROW_NUMBER() untuk menetapkan kedudukan kepada setiap rekod bagi setiap pengguna, dengan kedudukan tertinggi menunjukkan rekod terkini. Klausa WHERE memastikan bahawa hanya rekod dengan kedudukan 1, yang mewakili aktiviti terbaharu untuk setiap pengguna, dipilih.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Aktiviti Pengguna Terkini dengan Cekap dengan SQL?. 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