2009-07-26 16 views
0

テーブルがあり、最後の行の前に行を取得したいと思います。 例:SQL Server 2005クエリのヘルプ

KeyboardID  KeyboardName 
1     "DELL" 
2     "HP" 
3     "Viewsonic" 
4     "Samsung" 

選択最大(keyboardid)キーボードから - >サムスン

を取得します私の質問は

+1

これは私の心の中で「赤旗」を上げる:

SELECT MAX(KeyboardID) as SecondPlaceID FROM Keyboard WHERE KeyboardID < (SELECT MAX(KeyboardID) FROM Keyboard) 

または完全な行のため

。私はあなたがこれをやろうとする文脈を知ることに興味があります。それは私の意図ではありませんか、または役に立たない、私はちょうど別の角度から問題を攻撃することが有用かもしれないと思います。 –

答えて

3
SELECT * 
    FROM (
    SELECT *, 
    ROW_NUMBER() OVER (ORDER BY KeyboardId DESC) AS rn 
    FROM Table 
) AS t 
WHERE rn = 2; 
...ビューソニックキーボードを取得する方法です

または

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY KeyboardId DESC) AS rn 
    FROM Table) 
SELECT * 
    FROM cte 
    WHERE rn = 2; 

または

SELECT TOP(1) * 
    FROM (
    SELECT TOP(2) * 
     FROM Table 
     ORDER BY KeyboardId DESC) AS t 
    ORDER BY KeyboardId; 
+0

Hurrayである必要があります... – gbn

0
Declare @MaxID Int 
Select @MaxID = max(KeyboardID) from tblFacts 

Select top 1 * from tblFacts where KeyBoardID < @MaxID 
Order by @MaxID desc 
+0

これは "DELL"を返すでしょう... ORDER BYは集合体のないソリューションのためにDESC – AdaTheDev

2
SELECT TOP 1 * 
FROM Keyboard 
WHERE KeyboardID < (SELECT MAX(KeyboardID) FROM Keyboard) 
ORDER BY KeyboardID DESC 
2

実際に面接の質問としてこれを持っています。ただIDを取得するには、次の

SELECT * 
    FROM Keyboard 
    WHERE KeyboardID = (SELECT MAX(KeyboardID) 
         FROM Keyboard 
         WHERE KeyboardID < 
           (SELECT MAX(KeyboardID) FROM Keyboard))