首页 > 解决方案 > 如何按一列分组,按另一列聚合并在postgresql中获取另一列?

问题描述

这似乎很简单,但在过去的几个小时里找不到这个问题的答案。

我有一个表 request_state,其中“id”是主键,它可以有多个具有相同 state_id 的条目。我想在使用最大日期时间按 state_id 分组后获取 id。

所以我尝试了这个,但它给出了错误“state_id”必须出现在 GROUP BY 子句中或用于聚合函数中

select id, state_id, max(datetime) 
    from request_state 
    group by id

但是当我使用以下查询时,我得到多个具有相同 state_id 的条目。

select id, state_id, max(datetime) 
    from request_state 
    group by id, state_id

我的桌子:

id state_id date_time
cef 1 月 1 日
ter 1 1 月 2 日
ijk 1 月 3 日
uuu 2 月 1 日
rrr 2 月 2 日

这就是我想要的结果,

id state_id date_time 
__ ________ _________
ijk 1 月 3 日
rrr 2 月 2 日

标签: sqlpostgresql

解决方案


试试这个查询:

select id, state_id, date_time from (
  select id, state_id, date_time,
         row_number() over (partition by state_id order by date_time desc) rn
  from tbl
) a where rn = 1

推荐阅读