【问题标题】:postgres SQL query to find the recent entry for particular duplicate valuepostgresql 查询以查找特定重复值的最近条目
【发布时间】:2021-10-22 14:32:01
【问题描述】:

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

【问题讨论】:

  • 不应该(CD, '26Aug2021 11:12')是正确的记录,因为CD是重复的,这是最近的重复记录?

标签: sql postgresql


【解决方案1】:

您可以在这里尝试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;

【讨论】:

  • 嗨 TIm,主机名将作为输入提供,我必须不时更改主机名。如果您可以使用主机名作为输入进行查询,这将很有帮助
  • 然后编辑您的问题并向我们展示真正的问题和数据。
  • 我已经编辑了我的问题..提前谢谢
【解决方案2】:

应该很简单

SELECT max(timestamp) FROM tab WHERE hostname = 'AB';

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

【讨论】:

    【解决方案3】:

    distinct on 是您所需要的。请注意order by 子句。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 2016-08-30
      • 2021-12-27
      • 2021-09-06
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多