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

SQL Server中如何筛选最后N个CLIENT_ID对应的所有行?

解决方案

要在SQL Server中实现筛选最后N个不同CLIENT_ID对应的所有行,且支持自定义N值,可以使用**窗口函数DENSE_RANK()**来实现,具体代码如下:

DECLARE @N INT = 2; -- 替换成你需要的数值,比如20、60、100

SELECT *
FROM (
    SELECT *,
           -- 按CLIENT_ID降序排名,相同CLIENT_ID共享同一排名
           DENSE_RANK() OVER (ORDER BY CLIENT_ID DESC) AS ClientRank
    FROM DB
) AS RankedClients
-- 筛选排名在前N位的CLIENT_ID对应的所有行
WHERE ClientRank <= @N
-- 可根据需求保留排序
ORDER BY CLIENT_ID;

代码说明

  • DECLARE @N INT = 2:定义变量@N,直接修改赋值即可调整要保留的最后N个CLIENT_ID数量,无需改动查询主体逻辑。
  • DENSE_RANK() OVER (ORDER BY CLIENT_ID DESC):按CLIENT_ID降序生成排名,相同的CLIENT_ID会获得相同的排名,且排名是连续的(不会出现跳号),这样最后一个CLIENT_ID排名为1,倒数第二个为2,以此类推。
  • 外层查询通过ClientRank <= @N筛选出排名在前N位的CLIENT_ID对应的所有行,实现需求中的筛选效果。

示例验证

以你提供的场景为例,当@N=2时:

  • CLIENT_ID按降序排序为C93、B99、A19,对应的排名分别为1、2、3
  • 筛选ClientRank <=2后,会保留C93和B99的所有行,过滤掉A19的行,符合预期结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:25:58