在特定列 postgres 中选择具有最大值的组中的行

Posted

技术标签:

【中文标题】在特定列 postgres 中选择具有最大值的组中的行【英文标题】:Select row in group with largest value in particular column postgres 【发布时间】:2021-01-26 23:49:36 【问题描述】:

我有一个如下所示的数据库表。

 id       account_id      action             time_point

 3        234            delete                100
 1        656            create                600
 1        4435           update                900
 3        645            create                50

我需要按 id 对该表进行分组,并选择 time_point 具有最大值的特定行。

结果表应如下所示:

 id       account_id      action             time_point

 3        234            delete                100
 1        4435           update                900

感谢您的帮助, qwew

【问题讨论】:

【参考方案1】:

在 Postgres 中,我会推荐 distinct on 来解决这个前 1 个每组问题:

select distinct on (id) *
from mytable
order by id, time_point desc

但是,这不允许绑定。如果是这样,rank() 是更好的解决方案:

select *
from (
    select t.*, rank() over(partition by id order by time_point desc) rn
    from mytable t
) t
where rn = 1

或者,如果您正在运行 Postgres 13:

select *
from mytable t
order by rank() over(partition by id order by time_point desc)
fetch first row with ties

【讨论】:

【参考方案2】:

检查一下。

select * from x
where exists (
  select 1 from x xin
  where xin.id = x.id 
  having max(time_point) = time_point
);

【讨论】:

以上是关于在特定列 postgres 中选择具有最大值的组中的行的主要内容,如果未能解决你的问题,请参考以下文章

拉取具有组中特定列最大值的mysql行[重复]

在具有微分的组中找到最大值

Postgres:获取对应于组中其他列的最大值的列的值

Drupal Group模块,以编程方式将用户添加到具有特定角色的组中

基于组 ID 子集的时间戳列的组中的最后一行 - Postgres

消除类似行但具有特定值