2017-07-18 76 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