You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选metric_name、instance_id、instance唯一的最新数据行

获取metric_name、instance_id、instance组合唯一的最新数据行

可以用窗口函数ROW_NUMBER()来实现这个需求,这是目前通用且高效的方案之一。核心逻辑是:按metric_name、instance_id、instance三个字段分组,每组内按timestamp降序排序,标记行号后筛选出行号为1的记录——也就是每组的最新数据行。

完整SQL语句如下:

SELECT timestamp, metric_name, instance_id, value_sum, unit, instance
FROM (
    SELECT 
        timestamp, metric_name, instance_id, value_sum, unit, instance,
        ROW_NUMBER() OVER (
            PARTITION BY metric_name, instance_id, instance 
            ORDER BY timestamp DESC
        ) AS row_num
    FROM tbl_metrics
    WHERE 
        (metric_name = 'Disk Available' OR metric_name = 'Disk Percent Used') 
        AND instance != ''
) AS ranked_data
WHERE row_num = 1
ORDER BY timestamp DESC;

代码说明:

  • 内层子查询:给每条记录添加row_num字段,相同metric_name、instance_id、instance组合的记录被归为一组,组内按timestamp从新到旧排序,最新记录的行号为1。
  • 外层查询:仅保留row_num = 1的记录,即每个唯一组合的最新数据行。

如果你的数据库支持QUALIFY子句(比如BigQuery、Snowflake等),还可以简化写法,无需嵌套子查询:

SELECT timestamp, metric_name, instance_id, value_sum, unit, instance
FROM tbl_metrics
WHERE 
    (metric_name = 'Disk Available' OR metric_name = 'Disk Percent Used') 
    AND instance != ''
QUALIFY ROW_NUMBER() OVER (
    PARTITION BY metric_name, instance_id, instance 
    ORDER BY timestamp DESC
) = 1
ORDER BY timestamp DESC;

兼容旧版本数据库的写法:关联子查询

如果数据库不支持窗口函数,也可以用关联子查询获取每组的最大时间戳,再匹配对应记录:

SELECT t1.timestamp, t1.metric_name, t1.instance_id, t1.value_sum, t1.unit, t1.instance
FROM tbl_metrics t1
WHERE 
    (t1.metric_name = 'Disk Available' OR t1.metric_name = 'Disk Percent Used') 
    AND t1.instance != ''
    AND t1.timestamp = (
        SELECT MAX(timestamp)
        FROM tbl_metrics t2
        WHERE t2.metric_name = t1.metric_name 
          AND t2.instance_id = t1.instance_id 
          AND t2.instance = t1.instance
    )
ORDER BY t1.timestamp DESC;

这种写法逻辑直观,但数据量较大时性能可能不如窗口函数,因为子查询会对每组单独执行一次。

内容的提问来源于stack exchange,提问作者Pa3k.m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:05:24