Rumah >pangkalan data >tutorial mysql >Bagaimana untuk mengekstrak Baris Terakhir untuk Setiap ID dalam PostgreSQL?

Bagaimana untuk mengekstrak Baris Terakhir untuk Setiap ID dalam PostgreSQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-28 15:02:11565semak imbas

How to Extract the Last Row for Each ID in PostgreSQL?

Mengekstrak Baris Terakhir untuk Setiap ID dalam Postgresql

Pertimbangkan set data dengan lajur bernama id, tarikh dan another_info. Objektifnya adalah untuk mengekstrak maklumat terakhir (baris) bagi setiap id unik.

Untuk mencapai ini dalam Postgresql, dua kaedah biasa digunakan:

Distinct On Operator

Postgresql menyediakan operator yang berbeza, yang membolehkan anda menentukan bahawa hanya nilai yang berbeza bagi lajur tertentu dikembalikan. Dalam kes ini, pengendali boleh digunakan seperti berikut:

select distinct on (id) id, date, another_info
from the_table
order by id, date desc;

Pertanyaan ini memastikan bahawa hanya contoh terakhir bagi setiap id unik dikembalikan, dipesan dalam susunan menurun mengikut tarikh.

Fungsi Tetingkap

Sebagai alternatif, anda boleh menggunakan fungsi tetingkap untuk mencapai hasil yang sama. Fungsi tetingkap membolehkan anda melakukan pengiraan atau pengagregatan pada set baris yang dipisahkan. Dalam kes ini, pertanyaan berikut boleh digunakan:

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 menggunakan fungsi row_number() untuk memberikan nombor berjujukan kepada setiap baris dalam setiap partition id. Klausa tempat menapis hasil untuk memasukkan hanya baris dengan nilai rn tertinggi (iaitu, baris terakhir untuk setiap id).

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