SQL Server 2019:筛选非最小ID并添加对应分组最小ID列
实现SQL Server分组筛选非最小ID并显示组内最小ID
针对你的需求,在SQL Server 2019中可以通过以下两种常用方式实现:
方法一:使用窗口函数(推荐,高效)
利用MIN() OVER(PARTITION BY)窗口函数直接计算每组的最小ID,再过滤掉等于最小ID的记录:
SELECT id AS [not min], text, MIN(id) OVER (PARTITION BY text) AS [min id] FROM YourTableName -- 替换为实际表名 WHERE id <> MIN(id) OVER (PARTITION BY text) ORDER BY text, [not min];
说明
PARTITION BY text:按text字段分组MIN(id) OVER(...):计算当前分组内的最小IDWHERE子句过滤掉分组中ID等于最小ID的记录- 重命名列名以匹配预期结果格式
方法二:子查询关联
先通过子查询获取每组的最小ID,再与原表关联筛选目标记录:
SELECT t.id AS [not min], t.text, m.min_id AS [min id] FROM YourTableName t -- 替换为实际表名 INNER JOIN ( -- 子查询计算每组最小ID SELECT text, MIN(id) AS min_id FROM YourTableName GROUP BY text ) m ON t.text = m.text WHERE t.id <> m.min_id ORDER BY t.text, t.id;
说明
- 子查询先按
text分组计算每组最小ID - 内连接原表后,通过
WHERE过滤掉等于最小ID的记录
两种方法都能得到你需要的结果,窗口函数方案在大数据量场景下性能更优,因为只需扫描一次数据表。
内容的提问来源于stack exchange,提问作者nzskra
相关产品推荐
相关产品推荐

