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

SQL如何按Phase分组后查询每个分组的最后一行记录

SQL查询获取每个Phase分组最后一行记录的实现方案

下面提供两种适配不同数据库版本的实现方式:

方式1:支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、Oracle、SQL Server等通用方案)

使用ROW_NUMBER()窗口函数实现,逻辑直观性能较好:

SELECT * 
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY Phase ORDER BY `timestamp` DESC) AS row_rank
    FROM 你的表名 -- 替换为实际表名
) temp_table
WHERE row_rank = 1;
  • 逻辑说明:PARTITION BY Phase按Phase字段分组,ORDER BY timestamp DESC将每个分组内的记录按时间戳倒序排列,最新的记录排序为1,外层过滤即可拿到每个分组的最后一行。
  • 调整提示:如果同一Phase下存在多条相同最大时间戳的记录且需要全部返回,将ROW_NUMBER()替换为RANK()即可。

方式2:不支持窗口函数的低版本数据库(如MySQL 5.x)

可以用子查询加关联的方式实现:

SELECT t1.*
FROM 你的表名 t1 -- 替换为实际表名
INNER JOIN (
    SELECT Phase, MAX(`timestamp`) AS max_timestamp
    FROM 你的表名 -- 替换为实际表名
    GROUP BY Phase
) t2 ON t1.Phase = t2.Phase AND t1.`timestamp` = t2.max_timestamp;
  • 逻辑说明:先通过子查询统计每个Phase对应的最大时间戳,再和原表关联匹配,得到对应时间戳的完整行记录。
  • 注意:该方式默认会返回同一Phase相同最大时间戳下的所有匹配记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:45:02