postgrepostgres SQL查询,查找特定重复值的最近条目



我的表有两列,即主机名和时间戳。主机名将有许多重复的值,如下所述。我需要获得特定重复值的最后一个条目的时间戳。在这种情况下,服务器AB和cd都有重复的值。但我需要找到主机名=AB的重复值。在实时情况下,这个表将包含许多重复的主机名。

|hostname |timestamp|
|:........|---------:|
|AB       |14Aug2021 11:12|
|BC       |15Aug2021 11:12|
|CD       |16Aug2021 11:12|
|CD      |22Aug2021 11:12|
|AB      |25Aug2021 11:12|
|CD      |26Aug2021 11:12|

在上面的表中,我需要获得hostname=AB

的最新时间戳条目

您可以在这里尝试LIMIT查询:

SELECT hostname, timestamp
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.hostname = t1.hostname AND
t2.timestamp <> t1.timestamp)
ORDER BY timestamp DESC
LIMIT 1;

应该像

这样简单
SELECT max(timestamp) FROM tab WHERE hostname = 'AB';

聚合max将返回符合WHERE条件的所有行的最大时间戳。

不同的是你需要的。请注意order by条款。

select distinct on (hostname) *
from the_table 
where hostname = 'AB'
order by hostname, "timestamp" desc;

这个示例返回主机名'AB'的最新记录。您可以根据需要使用其他条件,或者根本不使用where,这将生成所有主机名的最新记录。如果您只需要一个主机名的时间戳,那么@LaurenzAlbe的答案应该更好。

最新更新