我的表有两列,即主机名和时间戳。主机名将有许多重复的值,如下所述。我需要获得特定重复值的最后一个条目的时间戳。在这种情况下,服务器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的答案应该更好。