仅从表中获取最新记录

问题描述 投票:0回答:1

尝试查询 Athena 中的数据库;该信息是按快照日期大批量记录的,因此一个“节点”将有多个重复条目 - 例如

节点 境界 快照_日期
节点 不适用 2022年2月21日
节点 不适用 2023/06/30
节点 不适用 2023年8月25日
节点 不适用 2021/03/13
节点 不适用 2022年7月12日
节点 不适用 2023年9月23日
诺德克 不适用 2023年8月25日
诺德克 不适用 2023年9月5日

我只想要每个唯一节点的最新条目 - 例如

节点 境界 快照_日期
节点 不适用 2023年8月25日
节点 不适用 2023年9月23日
诺德克 不适用 2023年9月5日

当前尝试在 snapshot_date 上使用子查询和 MAX(),并使用内部联接:

SELECT nodetable.*

FROM
    (SELECT
    node
    , MAX(snapshot_date) AS snapshot_date
    FROM
    table
    GROUP BY
    node) AS latest_snapshot
INNER JOIN
    nodetable
ON
    nodetable.node = latest_snapshot.node AND 
    nodetable.snapshot_date = latest_snapshot.snapshot_date
    
WHERE
    realm = 'NA'
    AND is_node_enabled = 'true'
    AND node_country= 'United States'

但它只返回数据集中最高日期的数据 - 所以基本上,它现在只会给我最新的 2023 年 9 月 23 日快照的结果,而不是具体的节点的最新快照。

sql amazon-athena
1个回答
0
投票

尝试这个方法

SELECT nodetable.*
FROM nodetable
LEFT JOIN (
    SELECT
        node,
        MAX(snapshot_date) AS snapshot_date
    FROM table
    GROUP BY node
) AS latest_snapshot
ON nodetable.node = latest_snapshot.node AND
nodetable.snapshot_date = latest_snapshot.snapshot_date
WHERE realm = 'NA'
AND is_node_enabled = 'true'
AND node_country = 'United States'

此查询将返回nodetable表中的所有行,即使latest_snapshot表中没有匹配的行。这意味着查询将从节点的最新快照返回数据,即使该快照比数据集中的最新快照更旧。

请注意,LEFT JOIN 还将返回 nodetable 表中的行,其中latest_snapshot 表中没有匹配的行。这意味着您可能需要向 WHERE 子句添加额外的过滤器以排除这些行,具体取决于您的具体需求。

© www.soinside.com 2019 - 2024. All rights reserved.