Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Baris Terkini dengan Cekap untuk Setiap ID dalam PostgreSQL?

Bagaimana untuk Mendapatkan Baris Terkini dengan Cekap untuk Setiap ID dalam PostgreSQL?

DDD
DDDasal
2025-01-02 19:40:39426semak imbas

How to Efficiently Retrieve the Most Recent Row for Each ID in PostgreSQL?

Mengambil Baris Terakhir untuk Setiap ID dalam PostgreSQL

Pertimbangkan set data dengan lajur untuk ID, tarikh dan maklumat tambahan:

id    date          another_info
1     2014-02-01         kjkj
1     2014-03-11         ajskj
1     2014-05-13         kgfd
2     2014-02-01         SADA
3     2014-02-01         sfdg
3     2014-06-12         fdsA

Matlamat kami adalah untuk mendapatkan semula baris terbaharu bagi setiap ID yang berbeza.

Menggunakan Distinct On Operator

Pendekatan paling berkesan dalam PostgreSQL ialah menggunakan operator DISTINCT ON:

SELECT DISTINCT ON (id) id, date, another_info
FROM the_table
ORDER BY id, date DESC;

Pertanyaan ini mengenal pasti dan mengembalikan hanya baris pertama yang berbeza untuk setiap ID unik, disusun mengikut menurun susunan lajur tarikh.

Menggunakan Fungsi Tetingkap

Untuk penyelesaian merentas pangkalan data, kita boleh memanfaatkan fungsi tetingkap:

SELECT id, date, another_info
FROM (
  SELECT id, date, another_info, 
  ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS rn
  FROM the_table
) t
WHERE rn = 1
ORDER BY id;

Pertanyaan ini mencipta fungsi tetingkap untuk mengira nombor baris bagi setiap ID, disusun mengikut tarikh dalam tertib menurun. Keadaan WHERE rn = 1 menapis baris untuk memasukkan hanya baris kedudukan tertinggi untuk setiap ID dan klausa ORDER BY akhir memastikan keputusan disusun mengikut ID.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Baris Terkini dengan Cekap untuk Setiap ID dalam PostgreSQL?. 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