如何在PostgreSQL中按一列分组,按另一列聚合并获得另一列?

时间:2018-08-17 16:56:16

标签: sql 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       Jan 1
ter 1 Jan 2
ijk 1 Jan 3
uuu 2 Feb 1
rrr 2 Feb 2

这就是我想要的结果,

id   state_id date_time 
__ ________ _________
ijk 1 Jan 3
rrr 2 Feb 2

3 个答案:

答案 0 :(得分:1)

您似乎想要:

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

如果您想让每个州的datetime最多的行,请使用distinct on

select distinct on (state) rs.*
from request_state rs
order by state, datetime desc;

答案 1 :(得分:1)

尝试此查询:

{{1}}

答案 2 :(得分:1)

您可以使用相关的suqbuery

select t.*
from table t
where date_time = (select max(date_time) from table t1 where t1.state_id = t.state_id);