Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya dapat mengambil entri terkini untuk setiap kumpulan dalam jadual pangkalan data?

Bagaimanakah saya dapat mengambil entri terkini untuk setiap kumpulan dalam jadual pangkalan data?

Barbara Streisand
Lepaskan: 2025-01-25 19:53:09
asal
786 orang telah melayarinya

How can I efficiently retrieve the latest entry for each group in a database table?

Kemasukan terkini setiap kumpulan

Matlamatnya adalah untuk mendapatkan kemasukan terkini setiap kumpulan unik dari jadual pangkalan data seperti

. Jadual ini mengandungi satu siri rekod perubahan status dokumen, setiap dokumen dikenalpasti oleh

. Tugasnya adalah untuk mengekstrak status kemas kini terkini setiap dokumen dan tarikh persatuannya. DocumentStatusLogs DocumentID Pertimbangkan penyeragaman pangkalan data

Pertama sekali, kita perlu mempertimbangkan sama ada reka bentuk pangkalan data telah diseragamkan dengan betul. Sekiranya maklumat status disimpan dalam jadual induk atau sub -meja? Jika anda hanya perlu mengakses keadaan semasa setiap dokumen, sebaiknya tambah medan status terus ke jadual induk untuk mengelakkan menggunakan jadual berasingan untuk mengesan perubahan status. Walau bagaimanapun, jika anda perlu mengekalkan rekod sejarah kemas kini negara, lebih berfaedah untuk mengekalkan perubahan negeri dalam jadual berasingan.

Ambil entri atas

Kembali ke masalah awal, tidak ada fungsi polimer yang dibina untuk mengambil semula entri atas setiap kumpulan. Oleh itu, pertanyaan tambahan atau sub -queries perlu dicapai untuk mencapai hasil yang diperlukan. pertanyaan cte

Satu kaedah adalah untuk membuat formula ekspresi awam (CTE) untuk menghasilkan hasil pertengahan. CTE bernama meningkatkan jadual asal dengan menambahkan nombor baris ke setiap entri. Nombor baris ini dihasilkan dalam setiap kumpulan , dan disusun mengikut urutan

yang menurun.

Pertanyaan ini memilih garis dengan nombor baris (RN) sama dengan 1 dari jadual , dengan berkesan menyediakan entri atas setiap

kumpulan. cte DocumentID kaedah alternatif DateCreated

<code class="language-sql">WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
   FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1</code>
Salin selepas log masuk
Kaedah lain ialah menggunakan fungsi

dan bukannya cte, terutamanya apabila setiap DocumentID mempunyai pelbagai entri dalam tarikh tertentu.

Ia akan memastikan bahawa semua penyertaan dalam tarikh tertentu mendapat kedudukan yang sama.

Kesimpulan

Dengan menggunakan teknologi di atas, anda boleh mengekstrak entri terkini setiap kumpulan untuk menggunakan sub -query CTE atau menggunakan fungsi DENSE_RANK. Kaedah yang anda pilih bergantung kepada keperluan data dan pertimbangan prestasi anda. ROW_NUMBER

Atas ialah kandungan terperinci Bagaimanakah saya dapat mengambil entri terkini untuk setiap kumpulan dalam jadual 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