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

SQL查询:获取每个analysisId对应的最大timestamp值

获取每个analysisId对应的最大timestamp值

需求说明

表myData包含timestamp(实际场景唯一)、analysisId及其他列,多条记录可共享同一analysisId但对应不同timestamp,需要查询每个analysisId对应的最大timestamp值。

示例数据

timestamp | analysisId
1234      | 1
1236      | 1
1300      | 2
1337      | 3
1400      | 3

期望结果

timestamp | analysisId
1236      | 1
1300      | 2
1400      | 3

原查询问题分析

你当前使用的查询:

SELECT "timestamp", analysisId FROM myData GROUP BY (analysisId, "timestamp") ORDER BY "timestamp" DESC LIMIT 1;

错误原因:

  • GROUP BY (analysisId, "timestamp")会将每一组唯一的(analysisId, timestamp)组合作为独立分组,最终分组结果和原表行数一致
  • LIMIT 1仅返回排序后的第一行,因此只能得到一条结果,无法覆盖所有analysisId

正确解决方案

方案1:GROUP BY + 聚合函数(仅需timestamp和analysisId时推荐)

通过GROUP BY按analysisId分组,使用MAX()函数提取每组的最大timestamp:

SELECT analysisId, MAX("timestamp") AS "timestamp"
FROM myData
GROUP BY analysisId;

这个方法简洁高效,直接满足仅获取analysisId和对应最大timestamp的需求。

方案2:窗口函数(需返回其他列时推荐)

如果需要同时返回该记录的其他列,可使用ROW_NUMBER()窗口函数:

SELECT "timestamp", analysisId -- 此处可添加其他需要的列
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY analysisId ORDER BY "timestamp" DESC) AS rn
    FROM myData
) t
WHERE rn = 1;
  • PARTITION BY analysisId将数据按analysisId分区
  • ORDER BY "timestamp" DESC使每个分区内最新的记录排在第一位
  • ROW_NUMBER()为每个分区的行编号,取rn=1即可得到每个analysisId对应最大timestamp的完整记录

内容的提问来源于stack exchange,提问作者Madden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:15:43