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>
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!