問題:
給定以下數據,您想要提取每個唯一的最後一筆記錄ID:
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
期望結果:
id date another_info 1 2014-05-13 kgfd 2 2014-02-01 SADA 3 2014-06-12 fdsA
解決方案:
有兩種有效的方法可以實現PostSQL中的這個:
方法1:使用DISTINCT ON 運算符
Postgres 提供了DISTINCT ON 運算符,它使您能夠根據一列或多列選擇不同的行,然後套用其他操作。對於這種場景,您可以使用:
SELECT DISTINCT ON (id) id, date, another_info FROM the_table ORDER BY id, date DESC;
方法2:使用視窗函數
視窗函數可讓您對一組行執行聚合或計算可以動態定義。您可以使用名為ROW_NUMBER() 的視窗函數為每個ID 群組中的每一行分配排名,並選擇排名最高的行:
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;
使用視窗函數的解決方案通常比使用更快子查詢。
以上是如何有效率地檢索 PostgreSQL 中每個 ID 的最後一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!