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

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

Susan Sarandon
Susan Sarandonasal
2024-12-28 17:09:11400semak imbas

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

PostgreSQL: Mendapatkan semula Baris Terakhir untuk Setiap ID

Masalah:

Memandangkan data berikut, anda ingin mengekstrak rekod terakhir untuk setiap ID unik:

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

Diingini Keputusan:

id    date          another_info
1     2014-05-13         kgfd
2     2014-02-01         SADA
3     2014-06-12         fdsA

Penyelesaian:

Terdapat dua kaedah yang cekap untuk mencapai ini dalam PostgreSQL:

Kaedah 1 : Menggunakan Operator DISTINCT ON

Postgres menyediakan Operator DISTINCT ON, yang membolehkan anda memilih baris yang berbeza berdasarkan satu atau lebih lajur dan kemudian menggunakan operasi lain. Untuk senario ini, anda boleh menggunakan:

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

Kaedah 2: Menggunakan Fungsi Tetingkap

Fungsi tetingkap membenarkan anda melakukan pengagregatan atau pengiraan ke atas satu set baris yang boleh ditakrifkan secara dinamik. Anda boleh menggunakan fungsi tetingkap yang dipanggil ROW_NUMBER() untuk menetapkan pangkat kepada setiap baris dalam setiap kumpulan ID dan memilih baris dengan pangkat tertinggi:

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;

Penyelesaian menggunakan fungsi tetingkap biasanya lebih cepat daripada menggunakan subquery.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Baris Terakhir 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