如何编写无需循环获取每个mrID最大ID对应行的SQL语句?
解决方案:获取每个mrID对应最大ID的整行数据(无需WHILE循环)
嘿,这事儿好办,不用WHILE循环的话,有两种简洁高效的方法能搞定你的需求,我给你详细说说:
方法一:使用窗口函数直接标记并筛选
这种方法利用窗口函数一次性给每行带上对应mrID组的最大ID,再筛选匹配的行,代码简洁且执行效率高:
WITH RankedData AS ( SELECT *, -- 给每个mrID分组的行都带上该组的最大ID值 MAX(ID) OVER(PARTITION BY mrID) AS MaxIDPerMrID FROM Final_Table_2 ) SELECT ID, mrID, mrSEQUENCE, mrNEWFIELDVALUE, mrTIMESTAMP, mrUSERID FROM RankedData -- 筛选出ID等于该组最大ID的行 WHERE ID = MaxIDPerMrID;
方法二:子查询聚合+关联原表
如果你对窗口函数不太熟悉,这种基于分组聚合再关联的方式逻辑更直观:
SELECT t.* FROM Final_Table_2 t INNER JOIN ( -- 先按mrID分组,找出每个组的最大ID SELECT mrID, MAX(ID) AS MaxID FROM Final_Table_2 GROUP BY mrID ) max_ids ON t.mrID = max_ids.mrID AND t.ID = max_ids.MaxID;
示例结果说明
针对你提供的测试数据,两种方法都会返回以下结果:
- 对于mrID=9998,最大ID是6,对应行:
6 9998 36275 Closed NULL cabacki - 对于mrID=9999,最大ID是3,对应行:
3 9999 35849 Closed NULL kabacki
内容的提问来源于stack exchange,提问作者MatthewSQL
相关产品推荐
相关产品推荐

