我有一個包含兩列的表,即主機名和時間戳。如下所述,主機名將具有許多重復值。我需要獲取特定重復值的最后一個條目的時間戳。在這種情況下,服務器 AB 和 CD 都有重復值。但我需要找到 Hostname=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 的最新時間戳條目
uj5u.com熱心網友回復:
您可以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;
uj5u.com熱心網友回復:
這應該很簡單
SELECT max(timestamp) FROM tab WHERE hostname = 'AB';
聚合max將從與WHERE條件匹配的所有行中回傳最大時間戳。
uj5u.com熱心網友回復:
與眾不同的是你所需要的。請注意該order by條款。
select distinct on (hostname) *
from the_table
where hostname = 'AB'
order by hostname, "timestamp" desc;
此特定插圖回傳主機名“AB”的最新記錄。您可以根據需要使用其他條件,也可以根本不使用where,這將為所有主機名生成最新記錄。如果您只需要一個主機名的時間戳,那么@LaurenzAlbe 的答案應該會更好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331631.html
標籤:sql PostgreSQL
