SQL中如何按实例分组获取各指标正值对应的最新日期?
调整后可直接满足需求的SQL(兼容所有主流关系型数据库)
SELECT "Instance", MAX(CASE WHEN "MetricID" = 'Metric1' THEN "Date" END) AS "Metric1_LatestDate", MAX(CASE WHEN "MetricID" = 'Metric2' THEN "Date" END) AS "Metric2_LatestDate", MAX(CASE WHEN "MetricID" = 'Metric3' THEN "Date" END) AS "Metric3_LatestDate" FROM "API_Metric2" WHERE "Value" > 0 GROUP BY "Instance"
调整说明
- 解决未过滤无效值问题:新增
WHERE "Value" > 0条件,会自动排除Value为0、NULL的记录,因为NULL和数值比较结果为UNKNOWN,不会被纳入统计范围。 - 解决行式转列式输出问题:使用条件聚合逻辑,通过
CASE WHEN匹配不同的MetricID取值,再嵌套MAX函数取对应指标的最大日期,最终仅按Instance分组,即可得到每行对应一个Instance、各指标最新日期单独成列的结果。
如果你的数据库支持PIVOT语法,也可以用PIVOT写法实现行转列,上述条件聚合写法的兼容性最高,可在MySQL、PostgreSQL、SQL Server、Oracle等所有主流数据库中直接运行。如果你的MetricID是数值类型,只需把CASE WHEN判断中的字符串引号去掉即可,比如改为WHEN "MetricID" = 1。
内容的提问来源于stack exchange,提问作者no name sry
相关产品推荐
相关产品推荐

