Sql 如何在postgres中选择多个不同的值和最大值?

Sql 如何在postgres中选择多个不同的值和最大值?,sql,postgresql,Sql,Postgresql,我有一个记录特定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 cour

我有一个记录特定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活动ID状态 323767241288妥协 323767 227405未追踪 32376722356未追踪 3237672226218法庭命令重新调查 3237672226217未追踪 319859 225642法院命令重新调查 319859 222568法庭命令重新调查 319807 222551 319807 222524 305458 204104法院命令重新调查 30545820002被定罪 我需要获取单个rowid的activityid的最大值..如下所示

rowid activityid status 323767 241288 Compromise 319859 225642 Reinvestigation ordered by court 319807 222551 305458 204104 Reinvestigation ordered by court rowid活动ID状态 323767241288妥协 319859 225642法院命令重新调查 319807 222551 305458 204104法院命令重新调查
基于标准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的解决方案将是最快的,其次是使用窗口函数的解决方案,而相关子查询很可能是最慢的。

您可以试试这个

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

欢迎来到SO。请在问题中包含您迄今为止尝试过的内容的信息(例如,您编写的代码、您从研究中发现的信息)。