T-SQL如何仅从表中选择第二行?

Ton*_*ony 28 t-sql sql-server

我有一个表,我需要检索第二行的ID.怎么实现呢?

通过Top 2我选择前两行,但我需要第二行

小智 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)

  • 我从未见过OFFSET和FETCH功能 - 这太棒了! (6认同)
  • 避免排序方式 Do - 排序方式(选择 NULL) (5认同)
  • 注意:需要存在 ORDER BY 子句 (2认同)

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)


Viv*_*nda 9

你可以使用OFFSETFETCH NEXT

\n\n
SELECT id\nFROM tablename\nORDER BY column\nOFFSET 1 ROWS\nFETCH NEXT 1 ROWS ONLY;\n
Run Code Online (Sandbox Code Playgroud)\n\n

笔记:

\n\n
\n

OFFSET 只能与 ORDER BY 子句一起使用。它不能单独使用。\n

\n\n

OFFSET 值必须大于或等于零。不能为负数,否则返回错误。

\n\n

OFFSET 参数用于标识从结果集中返回行的起点。基本上,它排除第一组\n 记录。

\n\n

FETCH 参数用于返回一组行数。FETCH\n不能单独使用,它与OFFSET结合使用。

\n
\n


KM.*_*KM. 8

用于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)


Mud*_*san 8

如果字段ID是唯一的,则不需要行号功能.

SELECT TOP 1 *
FROM (
  SELECT TOP 2 * 
  FROM yourTable
  ORDER BY ID
) z
ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)

  • @Rennitbaby z 是给封闭子查询的别名,它可以是任何字母或单词..省略它会引发语法错误 (2认同)

Pat*_*tec 5

我猜你正在使用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)


Ani*_*man 5

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)