SQL选择最高时间戳为最低的记录

时间:2020-08-30 23:18:58

标签: sql postgresql max sql-order-by greatest-n-per-group

我有一个包含重复名称和时间戳的数据库 我想检索其时间戳是按名称分组的最低时间戳的记录。

table : people
+------------+-------------+
|  Name      |  Timestamp  |
+------------+-------------+
|   name1    |   0         |
|   name1    |   5         |
|   name2    |   2         |
|   name3    |   3         |
|   name2    |   1         |
+--------------------------+

对于处于这种状态的数据库,查询应返回“ name2,2”,因为name2的最大值是所有组最大值中的最小值。

自从我知道我已经做过类似的查询以来,我就一直在考虑很多,但是我的SQL技能太生锈了。

感谢所有花时间帮助的人:)

1 个答案:

答案 0 :(得分:2)

似乎您想要的名称的最大时间戳是最低的:如果是这样,则可以使用聚合和限制:

select name
from people
group by name
order by max(timestamp)
limit 1

如果您想允许可能的联系:

select name
from (
    select name, rank() over(order by max(timestamp)) rn
    from people
    group by name
) t
where rn = 1

另一方面,如果您想要整个记录,我建议在Postgres中使用distinct on

select *
from (
    select distinct on (name) *
    from people
    order by name, timestamp desc
) t
order by timestamp
limit 1
相关问题