テーブルがあり、最後の行の前に行を取得したいと思います。 例:SQL Server 2005クエリのヘルプ
KeyboardID KeyboardName
1 "DELL"
2 "HP"
3 "Viewsonic"
4 "Samsung"
選択最大(keyboardid)キーボードから - >サムスン
を取得します私の質問は
テーブルがあり、最後の行の前に行を取得したいと思います。 例:SQL Server 2005クエリのヘルプ
KeyboardID KeyboardName
1 "DELL"
2 "HP"
3 "Viewsonic"
4 "Samsung"
選択最大(keyboardid)キーボードから - >サムスン
を取得します私の質問は
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;
Hurrayである必要があります... – gbn
Declare @MaxID Int
Select @MaxID = max(KeyboardID) from tblFacts
Select top 1 * from tblFacts where KeyBoardID < @MaxID
Order by @MaxID desc
これは "DELL"を返すでしょう... ORDER BYは集合体のないソリューションのためにDESC – AdaTheDev
SELECT TOP 1 *
FROM Keyboard
WHERE KeyboardID < (SELECT MAX(KeyboardID) FROM Keyboard)
ORDER BY KeyboardID DESC
実際に面接の質問としてこれを持っています。ただIDを取得するには、次の
SELECT *
FROM Keyboard
WHERE KeyboardID = (SELECT MAX(KeyboardID)
FROM Keyboard
WHERE KeyboardID <
(SELECT MAX(KeyboardID) FROM Keyboard))
これは私の心の中で「赤旗」を上げる:
または完全な行のため
。私はあなたがこれをやろうとする文脈を知ることに興味があります。それは私の意図ではありませんか、または役に立たない、私はちょうど別の角度から問題を攻撃することが有用かもしれないと思います。 –