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

SQL Server按rsptxt_question_fk分组取最大rsptxt_id_pk对应记录

SQL Server 分组取主键最大值对应记录的查询方案

需求描述

  • 针对业务表中每个rsptxt_question_fk分组,查询组内rsptxt_id_pk值最大的记录对应的rsptxt_text_response及整行其他字段
  • 预期返回结果共2条:(48, abc, 1, 33)、(51, def, 8, 22)
  • 数据表结构参考样例:
    数据表样例截图

可直接使用的查询写法

写法1:窗口函数实现(推荐,适用于SQL Server 2008及以上版本)

逻辑清晰、执行性能优,通过ROW_NUMBER()给每个分组内的记录按主键倒序打序号,取序号为1的记录即可:

SELECT
    rsptxt_id_pk,
    rsptxt_text_response,
    rsptxt_question_fk,
    col_33 -- 替换为你表中对应值为33、22的实际字段名
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER(
            PARTITION BY rsptxt_question_fk
            ORDER BY rsptxt_id_pk DESC
        ) AS row_sort
    FROM 替换为你的实际表名
) temp
WHERE row_sort = 1

特殊场景说明:如果同一个rsptxt_question_fk下存在多条记录rsptxt_id_pk值完全相同且都是最大值,需要把所有匹配记录返回时,将ROW_NUMBER()替换为RANK()即可。

写法2:关联子查询实现(兼容所有SQL Server版本)

先聚合查询出每个分组对应的最大主键值,再关联原表匹配到完整记录:

SELECT a.*
FROM 替换为你的实际表名 a
INNER JOIN (
    SELECT
        rsptxt_question_fk,
        MAX(rsptxt_id_pk) AS max_pk_id
    FROM 替换为你的实际表名
    GROUP BY rsptxt_question_fk
) b
ON a.rsptxt_question_fk = b.rsptxt_question_fk
AND a.rsptxt_id_pk = b.max_pk_id

执行效果

两种写法执行后都会返回预期结果:

  • 记录1:rsptxt_id_pk=48,rsptxt_text_response=abc,关联字段值分别为1、33
  • 记录2:rsptxt_id_pk=51,rsptxt_text_response=def,关联字段值分别为8、22

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:15:52