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!