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

如何使用T-SQL按ID和Visit_No提取最大Room数的记录?

T-SQL提取每个ID+Visit_No组合下Room最大的记录

你提到的ROW_SEQUENCE应该是打错了,正确的函数是ROW_NUMBER(),这是处理这类分组取最值场景最常用的方法,下面给你两种可行的方案:

方案一:使用ROW_NUMBER()窗口函数

这种方法通过窗口函数给每个ID+Visit_No分组内的行按Room降序编号,取编号为1的行就是该分组下Room最大的记录:

WITH RankedRooms AS (
    SELECT 
        ID,
        Visit_No,
        Room,
        -- 按ID和Visit_No分组,每组内按Room降序排,最大的Room行编号为1
        ROW_NUMBER() OVER (PARTITION BY ID, Visit_No ORDER BY Room DESC) AS RowNum
    FROM YourTable -- 替换成你的实际表名
)
SELECT ID, Visit_No, Room
FROM RankedRooms
WHERE RowNum = 1;

如果同一分组下存在多个行的Room值都是最大值,ROW_NUMBER()会随机给它们编不同的号,只返回其中一行。若需要保留所有并列最大值的行,把ROW_NUMBER()换成RANK()或者DENSE_RANK()即可。

方案二:分组子查询关联原表

如果你对窗口函数不太熟悉,也可以用分组子查询先找出每个ID+Visit_No对应的最大Room值,再关联原表获取完整记录:

SELECT t.ID, t.Visit_No, t.Room
FROM YourTable t
INNER JOIN (
    -- 先分组找出每个ID+Visit_No的最大Room值
    SELECT ID, Visit_No, MAX(Room) AS MaxRoom
    FROM YourTable
    GROUP BY ID, Visit_No
) sub ON t.ID = sub.ID 
    AND t.Visit_No = sub.Visit_No 
    AND t.Room = sub.MaxRoom;

这种方法会返回同一分组下所有Room等于最大值的行,适合需要保留所有并列最大值记录的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:12:13