小智 62
在SQL Server 2012+中,您可以使用OFFSET ... FETCH:
SELECT
<column(s)>
FROM
<table(s)>
ORDER BY
<sort column(s)>
OFFSET 1 ROWS -- Skip this number of rows
FETCH NEXT 1 ROW ONLY; -- Return this number of rows
Run Code Online (Sandbox Code Playgroud)
Mar*_*ith 23
假设SQL Server的2005+如何让一个例子只是在第二行(我想你可能会问-是为什么原因top?会不会为你工作)
set statistics io on
;with cte as
(
select *
, ROW_NUMBER() over (order by number) as rn
from master.dbo.spt_values
)
select *
from cte
where rn = 2
/* Just to add in what I was running RE: Comments */
;with cte as
(
select top 2 *
, ROW_NUMBER() over (order by number) as rn
from master.dbo.spt_values
)
select *
from cte
where rn = 2
Run Code Online (Sandbox Code Playgroud)
你可以使用OFFSET和FETCH NEXT
SELECT id\nFROM tablename\nORDER BY column\nOFFSET 1 ROWS\nFETCH NEXT 1 ROWS ONLY;\nRun Code Online (Sandbox Code Playgroud)\n\n笔记:
\n\n\n\nOFFSET 只能与 ORDER BY 子句一起使用。它不能单独使用。\n
\n\nOFFSET 值必须大于或等于零。不能为负数,否则返回错误。
\n\nOFFSET 参数用于标识从结果集中返回行的起点。基本上,它排除第一组\n 记录。
\n\nFETCH 参数用于返回一组行数。FETCH\n不能单独使用,它与OFFSET结合使用。
\n
用于ROW_NUMBER()对行进行编号,但TOP仅用于处理前两行.
试试这个:
DECLARE @YourTable table (YourColumn int)
INSERT @YourTable VALUES (5)
INSERT @YourTable VALUES (7)
INSERT @YourTable VALUES (9)
INSERT @YourTable VALUES (17)
INSERT @YourTable VALUES (25)
;WITH YourCTE AS
(
SELECT TOP 2
*, ROW_NUMBER() OVER(ORDER BY YourColumn) AS RowNumber
FROM @YourTable
)
SELECT *
FROM YourCTE
WHERE RowNumber=2
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
YourColumn RowNumber
----------- --------------------
7 2
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
如果字段ID是唯一的,则不需要行号功能.
SELECT TOP 1 *
FROM (
SELECT TOP 2 *
FROM yourTable
ORDER BY ID
) z
ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)
我猜你正在使用SQL 2005或更高版本.第二行选择前两行并使用'ORDER BY ROW_COUNT DESC',第二行排列为第一行,然后使用TOP 1选择
SELECT TOP 1 COLUMN1, COLUMN2
from (
SELECT TOP 2 COLUMN1, COLUMN2
FROM Table
) ORDER BY ROW_NUMBER DESC
Run Code Online (Sandbox Code Playgroud)
with T1 as
(
select row_number() over(order by ID) rownum, T2.ID
from Table2 T2
)
select ID
from T1
where rownum=2
Run Code Online (Sandbox Code Playgroud)