row_number()over() 函数字段怎用作查询条件


如图中代码,要怎么写才能将 rn_13333 做为筛选条件。where后使用其他b表任何字段都没问题

2 个赞

让我来告诉你:

  1. 直接在查询中使用 ROW_NUMBER() 生成序号,并基于该序号进行过滤
    SELECT *
    FROM (
    SELECT *,
    ROW_NUMBER() OVER (PARTITION BY some_column ORDER BY another_column) as rn
    FROM your_table
    ) t
    WHERE t.rn <= N;
  2. 使用子查询或CTE(公用表表达式)来先生成带有序号的临时表,然后基于这个序号进行过滤
    WITH RankedData AS (
    SELECT *,
    ROW_NUMBER() OVER (PARTITION BY some_column ORDER BY another_column) as rn
    FROM your_table
    )
    SELECT *
    FROM RankedData
    WHERE rn <= N;

11

这个感觉不像语法报错,语法报错的话应该会提示什么right syntax to use near …

学习学习

多次试了后,要进行 row_number() 排序的表是物理表的话,可以使用排序序号进行过滤,若是临时表的话,就不能使用排序序号进行过滤了,不知有什么解决办法,脚本是从oracle迁移过来的

感谢分享

你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节。建议你通过以下方式寻求帮助:
1.如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;
2.如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。
OceanBase官网商务咨询

https://www.oceanbase.com/contactus?fromPage=https%3A%2F%2Fwww.oceanbase.com%2Fsoftwarecenter-enterprise&dataSources=softwarecenter-enterprise_footercontact_d2022