簡體   English   中英

如何在Postgres中選擇多個不同的值和最大值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM