Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Baris Teratas dengan Cekap untuk Setiap Kumpulan dalam Pangkalan Data SQL?

Bagaimana untuk Mendapatkan Baris Teratas dengan Cekap untuk Setiap Kumpulan dalam Pangkalan Data SQL?

Mary-Kate Olsen
Lepaskan: 2025-01-25 19:57:15
asal
911 orang telah melayarinya

How to Efficiently Retrieve the Top Row for Each Group in a SQL Database?

Mengekstrak Baris Teratas daripada Setiap Kumpulan dalam Pangkalan Data SQL

Pengumpulan dan analisis data adalah asas dalam pengurusan pangkalan data. Selalunya, anda perlu mengenal pasti baris teratas (cth., entri terbaharu) dalam setiap kumpulan. Artikel ini menunjukkan cara untuk mencapai ini dengan cekap menggunakan SQL.

Memanfaatkan Fungsi Tetingkap

Walaupun SQL tidak menawarkan fungsi agregat khusus untuk tugas ini, Window Functions menyediakan penyelesaian yang elegan. Fungsi ini beroperasi pada set baris dalam julat yang ditentukan, membolehkan pengiraan dan pengagregatan pada subset data.

Pertimbangkan jadual bernama "DocumentStatusLogs" dengan lajur "DocumentID," "Status" dan "DateCreated." Untuk mendapatkan semula status terkini bagi setiap dokumen, gunakan pertanyaan SQL ini:

<code class="language-sql">WITH RankedLogs AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) as rn
    FROM DocumentStatusLogs
)
SELECT *
FROM RankedLogs
WHERE rn = 1;</code>
Salin selepas log masuk

Ungkapan Common Table (CTE) "RankedLogs" menggunakan ROW_NUMBER() untuk menyusun baris dalam setiap partition "DocumentID", disusun mengikut "DateCreated" (menurun). Pertanyaan utama kemudian memilih hanya baris dengan rn = 1, dengan berkesan mengembalikan baris teratas untuk setiap kumpulan.

Penormalan dan Integriti Data

Soalan asal juga menyentuh normalisasi pangkalan data. Jadual contoh ("DocumentStatusLogs") mengekalkan sejarah perubahan status. Menyimpan sejarah ini bermanfaat untuk menjejaki perubahan dari semasa ke semasa. Walau bagaimanapun, jika anda memerlukan akses segera kepada status terkini, pertimbangkan untuk menambah lajur "Status Semasa" pada jadual "Dokumen Semasa" dan menggunakan pencetus untuk mengemas kininya. Ini memerlukan pengurusan yang teliti untuk memastikan ketekalan data dan mengelakkan anomali.

Dengan menggabungkan Fungsi Tetingkap dan pertimbangan yang bertimbang rasa terhadap normalisasi data, anda boleh mendapatkan semula baris teratas dengan berkesan untuk setiap kumpulan dalam pangkalan data SQL anda.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Baris Teratas dengan Cekap untuk Setiap Kumpulan dalam Pangkalan Data SQL?. 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