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

如何筛选ROW_NUMBER()生成的PRank大于1的分区结果?

筛选ROW_NUMBER()生成的PRank大于1的记录

你已经用ROW_NUMBER()完成了按CountryCode和ClientRef分区、QuoteDate排序的步骤,要筛选出PRank > 1的结果,有两种常用且易读的实现方式,适配大部分主流SQL数据库(比如SQL Server、MySQL 8+、PostgreSQL等):

方法1:子查询嵌套

把生成PRank的查询作为内层子查询,在外层直接添加筛选条件就行:

SELECT *
FROM (
    SELECT 
        CountryCode,
        ClientRef,
        [Quote Ref],
        Name,
        Address,
        PostCode,
        PreferencesCode,
        QuoteDate,
        PolicyType,
        ROW_NUMBER() OVER (PARTITION BY CountryCode, ClientRef ORDER BY QuoteDate) AS PRank
    FROM 你的实际表名
) AS RankedResults
WHERE PRank > 1;

方法2:用CTE(公共表表达式)优化可读性

如果你的数据库支持CTE(现在大部分现代SQL引擎都支持),这种写法结构更清晰,后期维护起来也方便:

WITH RankedResults AS (
    SELECT 
        CountryCode,
        ClientRef,
        [Quote Ref],
        Name,
        Address,
        PostCode,
        PreferencesCode,
        QuoteDate,
        PolicyType,
        ROW_NUMBER() OVER (PARTITION BY CountryCode, ClientRef ORDER BY QuoteDate) AS PRank
    FROM 你的实际表名
)
SELECT *
FROM RankedResults
WHERE PRank > 1;

小提醒:

  • 记得把代码里的你的实际表名替换成你真实的表名称
  • 像Quote Ref这种带空格的列名,不同数据库的转义方式可能不一样(比如SQL Server用方括号,MySQL用反引号),保持和你原查询的写法一致就好
  • 这两种方法本质逻辑相同:先计算所有行的PRank值,再过滤出符合条件的记录,选哪种全看你个人的代码风格偏好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:43:08