我有一个包含重复名称和时间戳的数据库,我想检索其时间戳是按名称分组的最低时间戳的记录。
table : people
+------------+-------------+
| Name | Timestamp |
+------------+-------------+
| name1 | 0 |
| name1 | 5 |
| name2 | 2 |
| name3 | 3 |
| name2 | 1 |
+--------------------------+
对于处于这种状态的数据库,查询应返回“ name2,2”,因为name2的最大值是所有组最大值中的最小值。
自从我知道我已经做过类似的查询以来,我就一直在考虑很多,但是我的SQL技能太生锈了。
感谢任何花时间帮助的人:)
似乎您想要的名称的最大时间戳是最低的:如果是这样,则可以使用聚合和限制:
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
另一方面,如果您想要整个记录,我会distinct on
在Postgres中建议:
select *
from (
select distinct on (name) *
from people
order by name, timestamp desc
) t
order by timestamp
limit 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句