PostgreSQL:获取与最大值关联的日期

我有一个表格,形式为

USER  |VALUE |DATE
-------------------------
user1 | 1337 | 2019-11-01
user1 | 1338 | 2019-03-28
user2 | 1234 | 2019-04-23
user2 | 4567 | 2019-05-05

,并希望获得每个用户及其关联日期的最大值。当我做类似的事情

SELECT max(VALUE) FROM table
GROUP BY USER

我有一个问题,我既不能在DATE进行汇总也不能进行分组。我怎样才能告诉PostgreSQL我只想知道与最大行数相关的日期。值是吗?

谢谢!

lh2009168 回答:PostgreSQL:获取与最大值关联的日期

Click: demo:db<>fiddle

您可以使用DISTINCT ON:这为您提供了有序组的第一条记录。在您的情况下,组是您的user列。您必须按value DESC进行排序,以使最大value成为第一条记录。这将被采用-包括相关的date值。

SELECT DISTINCT ON (user)
    *
FROM 
    mytable
ORDER BY user,value DESC
,

如果要在查询中使用其他聚合,还可以使用array_agg()来模仿“ first”函数:

select user,max(value),count(*),(array_agg(date order by value desc))[1] as date_at_max
from t
group by user;
本文链接:https://www.f2er.com/2948655.html

大家都在问