http://www.sqlpassj.org/bunkakai/web/series/ado/04.aspx
SELECT TOP 1 * FROM
(SELECT TOP 3 * FROM TABLE ORDER BY ITEM) TABLE ORDER BY ITEM DESC
まず、先頭から3件レコードを抽出し、それを逆順にして 先頭1件
抽出すればいいでしょう。
http://www.sqlpassj.org/bunkakai/web/series/ado/04.aspx
SELECT TOP 1 * FROM
(SELECT TOP 3 * FROM TABLE ORDER BY ITEM) TABLE ORDER BY ITEM DESC
まず、先頭から3件レコードを抽出し、それを逆順にして 先頭1件
抽出すればいいでしょう。
こちらはどうですか
http://72.14.235.104/search?q=cache:QEAWSFG6PA8J:oshiete1.go...
たとえば、「2件目から2件」、「3件目から3件」?「n件目からm件分」ですよね。
コード:
--------------------------------------------------------------------------------
SELECT *
FROM (
SELECT TOP m *
FROM (
SELECT TOP n + m
column clause
FROM table
WHERE where clause
ORDER BY order clause ASC /-- 最初からページの最後のレコードまで
)
ORDER BY order clause DESC /-- ページの最後から最初のレコードまで
)
ORDER BY order clause ASC /-- その結果をひっくり返す
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2443...
SELECT TOP 1 * FROM [table]
WHERE([column] NOT IN
(SELECT TOP 2 [column] FROM [table]
ORDER BY [column]) )
ORDER BY [column]
で、出来ました。
SQL Server 2005 であればROW_NUMBER関数を使用すれば可能です。
それ以前の場合は、Nextなどを使用して該当のレコードに移動しないと取得することは出来ないと思います。
ちょっとスマートじゃないかも知れませんが…
SELECT TOP 1 *
FROM (
SELECT TOP 3 *
FROM TABLE
ORDER BY ITEM
) DUMMY_NAME
ORDER BY ITEM DESC
TOP 3 で上位3件を取り出したあと、さかさまに並べ替えて TOP 1 を使っています。
IDを主キー列として、
SELECT TOP 3 * FROM TABLE ORDER BY ITEM
WHERE ID not in (
SELECT TOP 2 ID FROM TABLE ORDER BY ITEM)
コメント(0件)