[英]How to select multiple distinct values and max values in postgres?
我有一張記錄特定rowid活動的表。 樣本數據為
rowid activityid status 323767 241288 Compromise 323767 227405 Untraced 323767 226356 Untraced 323767 226218 Reinvestigation ordered by court 323767 226217 Untraced 319859 225642 Reinvestigation ordered by court 319859 222568 Reinvestigation ordered by court 319807 222551 319807 222524 305458 204104 Reinvestigation ordered by court 305458 204002 Convicted
我需要獲取單個rowid的activityid的最大值。如下所示
rowid activityid status 323767 241288 Compromise 319859 225642 Reinvestigation ordered by court 319807 222551 305458 204104 Reinvestigation ordered by court
基於標准ANSI SQL的解決方案將使用一個相關的子查詢
select t1.rowid,
t1.activityid,
t1.status
from the_table t1
where t1.activityid = (select max(t2.activityid)
from the_table t2
where t1.rowid = t2.rowid)
order by rowid;
或(更有效地)窗口功能:
select *
from (
select rowid,
activityid,
max(activityid) over (partition by rowid) as max_activity,
status
from the_table
) t
where activityid = max_activity
rowid;
但是在Postgres中,可以通過使用distinct on
運算符更有效地完成
select distinct on (rowid) rowid, activityid, status
from the_table
order by rowid, activityid desc
distinct on
重復的解決方案將是最快的,其次是使用窗口函數的解決方案,並且與之相關的子查詢最有可能成為最慢的解決方案。
你可以試試這個
select tableA.rowid,tableA.activityid,table.status
from (select rowid,max(activityid) as activityid
from table
group by rowid) tableA,table
where tableA.activityid = table.activityid
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.