如何根据过滤条件sql oracle从表中获取前N行

时间:2017-08-01 04:41:54

标签: sql oracle greatest-n-per-group

我试图为每个匹配的ID检索前500条记录。我尝试了以下查询,但它检索了总共500条记录,而不是2500条记录。每个ID都有超过500条记录。

示例:

select id from table where id in (1,2,3,4,5) and rownum <= 500

1 个答案:

答案 0 :(得分:2)

使用ROW_NUMBER分析函数为分区中的每条记录获取唯一的行号,然后限制外部查询中的行。

这是emp表的一个例子 -

SELECT *
  FROM (SELECT a.*,
               ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY ename)
                  row_num
          FROM emp a)
 WHERE row_num <= 3;
  • 在上面的查询中,row_number函数将返回唯一的编号 特别是部门的行。
  • 外部查询中的
  • Where clause会将结果集过滤为每个部门最多3条记录。