2012-01-06 48 views
2

我想執行2個分離的命令從我的表中返回一個值。如何從頂部2選擇第二條線或類似的東西?

的第一種可以頂1,因爲是第一行,沒問題......

,但我怎麼能做出像前2,但只顯示第二行?

有一個簡單的辦法做到這一點?像一個簡單的選擇?

1線:

通過LASTUPDATE遞減選擇產品訂單前1碼

+3

可能重複[如何選擇一個SQL數據庫表中的第n行?](http://stackoverflow.com/questions/16568/how-to-select-the-nth -row-in-a-sql-database-table)和[許多其他](http://stackoverflow.com/search?q=sql+select+nth+from+top) – 2012-01-06 01:51:53

回答

9

沒有通用的解決這個問題,據我所知 - 不同的DBMS有不同的方式實現這一點。

在Microsoft SQL Server,你可以使用ROW_NUMBER條款:

SELECT code FROM 
    (SELECT TOP 2 code, Row_Number() OVER (ORDER BY lastupdate) AS rownum 
    FROM Products) AS tbl 
WHERE rownum = 2; 

Oracle有一個類似的僞列,被稱爲ROWNUM。但是,這裏需要注意的是,這個值在之前的被計算出來。因此,你將不得不再次使用子查詢:

SELECT code FROM 
    (SELECT code, ROWNUM rnum FROM 
     (SELECT code FROM Products ORDER BY lastupdate) 
    WHERE ROWNUM <= 2) 
WHERE rnum = 2 

請注意,你不能做一個簡單的ROWNUM = 2條件在這裏,因爲它永遠不會滿足 - ROWNUM考慮到實際返回的數字行,所以如果從來沒有第一個返回的行,ROWNUM將永遠達不到值'2',因此永遠不會滿足條件。

在MySQL中,這是更簡單:

SELECT code FROM Products ORDER BY lastupdate LIMIT 2, 1 

(我不熟悉MySQL的,所以我不知道,如果限制將前或ORDER BY子句後進行計算 - 將是巨大的,如果別人可以證實這一點)。

其他的DBMS做在一個甚至不同的方式。

-2

SELECT A.CName FROM(自TNAME ORDER BY CNAME降序選擇CNAME FETCH FIRST 2 ROWS ONLY)作爲由A.cname甲爲了只獲取第一行1;

其中CNAME要引用=列中,從其中U想拉 TNAME =表名。 這裏u能取代的2ü要獲取該行的值..

1

要我在MS-SQL,這是簡單的記住:

選擇top N行的次序遞減爲「表」,然後選擇頂部1級遞增

SELECT TOP 1 code FROM 
    (SELECT TOP 2 code, lastupdate FROM Products ORDER BY lastupdate DESC) AS tblTempQuery 
ORDER BY lastupdate ASC 
+0

唯一的問題是這不會選擇如果有,則爲NULL只有一行。 – James 2016-03-18 10:17:03

相關問題