尝试查询 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 日快照的结果,而不是具体的节点的最新快照。
尝试这个方法
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 子句添加额外的过滤器以排除这些行,具体取决于您的具体需求。