如何通过SQL Server视图保留特定列值最大的重复行?
需求完全可行!
当然可以实现这个需求,在SQL Server里我们有几种简洁的方式达成目标——基于第一、第二列识别重复组,只保留每组中第四列值最大的记录,第三列的存在完全不影响逻辑,只是会被正常返回在视图里。
下面给你两种常用的实现方案:
方案一:使用ROW_NUMBER()窗口函数(推荐)
这种方法可以精准控制只返回每组内第四列最大的一行(如果有多个行第四列值相同,还能通过额外排序规则确定优先级):
CREATE VIEW vw_UniqueMaxRecords AS SELECT Col1, Col2, Col3, Col4 FROM ( SELECT Col1, Col2, Col3, Col4, -- 按前两列分组,每组内按第四列降序排,标记行号 ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY Col4 DESC) AS RowNum FROM YourTableName -- 替换成你的实际表名 ) RankedRecords WHERE RowNum = 1; -- 只取每组里排第一的(第四列最大的)行
如果同一分组内有多个行的第四列值相同,你可以在ORDER BY里加额外条件(比如ORDER BY Col4 DESC, Col3 DESC)来指定筛选优先级,避免随机返回。
方案二:使用MAX()聚合函数关联
这种方法通过子查询先算出每组的最大第四列值,再关联原表找到对应记录:
CREATE VIEW vw_UniqueMaxRecords AS SELECT t.Col1, t.Col2, t.Col3, t.Col4 FROM YourTableName t INNER JOIN ( -- 按前两列分组,求出每组的最大第四列值 SELECT Col1, Col2, MAX(Col4) AS MaxCol4 FROM YourTableName GROUP BY Col1, Col2 ) GroupedMax ON t.Col1 = GroupedMax.Col1 AND t.Col2 = GroupedMax.Col2 AND t.Col4 = GroupedMax.MaxCol4;
注意:如果同一分组内有多个行的第四列值都是最大值,这个方案会返回所有这些行;如果你只需要唯一一行,方案一更适合。
内容的提问来源于stack exchange,提问作者ParSa
相关产品推荐
相关产品推荐

