2017-07-18 39 views
-1

我有一个SQL查询,像这样:ROWNUM没有显示我需要的结果?

SELECT 
make, model, year 
FROM table 
WHERE ROWNUM <= 15 
ORDER BY year DESC 

问题是它的ORDER BY之前ROWNUM,所以我没有看到最近几年。它选择前15行数据然后排序。我需要先按年降序排列,然后选择前15个。达到此目的的最佳方式是什么?

谢谢!

+1

您已经在您的问题上回答了:)。首先你做出选择顺序,然后从那个结果中选择用rownum – Leo

+0

'SELECT * FROM(SELECT * FROM TABLE ORDER BY year DESC)WHERE ROWNUM <= 15' – Leo

回答

1

使用此:

SELECT * 
    FROM 
     (SELECT make, 
       model, 
       YEAR, 
       rownum rowno 
      FROM 
       (SELECT make, model, YEAR FROM TABLE ORDER BY YEAR DESC 
       ) 
     ) 
    WHERE rowno <=15; 

第一 - 从年份子查询中返回记录集,使用第二个子查询项目rownumber,将rowno限制为< = 15

+0

谢谢!这是我用过的。 – dansmith841

1

没有对性能的关注(我相信你还是会扫描整个表),尝试公用表表达式(CTE):

WITH cte AS (
    SELECT 
    make, model, year 
    FROM table 
    ORDER BY year DESC 
) 
SELECT * 
FROM cte 
WHERE ROWNUM <= 15; 
+0

感谢CTE的例子,这是第一个我'我听说过它。 – dansmith841