2017-08-01 70 views
-3

我试图为每个匹配的ids检索前500条记录。我尝试了下面的查询,但是它检索到总共500条记录,而不是2500条。每个id有超过500条记录。如何根据过滤条件从表中提取前N行sql oracle

例子:

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

回答

2

使用ROW_NUMBER解析函数来获得一个唯一的行号为​​分区中的每个记录,然后在外部查询限制行。

下面是从EMP表-1

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条记录。