使用sql查找第n行
问题描述:
select top 20 *
from dbo.DUTs D
inner join dbo.Statuses S on d.StatusID = s.StatusID
where s.Description = 'Active'
上面的SQL查询返回前20行,如何从上述查询的结果中获得第n行?我查看以前的帖子,发现第n行,并不清楚用于我的目的。使用sql查找第n行
谢谢。
答
行顺序是任意的,所以我会添加一个ORDER BY
表达式。然后,你可以这样做:
SELECT TOP 1 * FROM (SELECT TOP 20 * FROM ... ORDER BY d.StatusID) AS d ORDER BY d.StatusID DESC
得到第20行。
您还可以使用OFFSET像:
SELECT * FROM ... ORDER BY d.StatusID OFFSET 19 ROWS FETCH NEXT 1 ROWS ONLY
还有第三个选项:
SELECT * FROM (SELECT *, rownum = ROW_NUMBER() OVER (ORDER BY d.StatusID) FROM ...) AS a WHERE rownum = 20
答
我倾向于使用热膨胀系数与ROW_NUMBER()函数来得到我列出顺序编号。正如@zambonee所说的,无论哪种方式,您都需要一个ORDER BY子句,或者SQL可以每次都以不同的顺序放置它们。它通常不会,但是没有自己订购,你不能保证两次获得同样的东西。在这里,我假设有一个[DateCreated]字段(DATETIME NOT NULL DEFAULT GETDATE()),这通常是一个好主意,所以您知道该记录何时输入。这是说“给我的那张桌子的一切,并添加行号与最近的战绩为#1”:
; WITH AllDUTs
AS (
SELECT *
, DateCreatedRank = ROW_NUMBER() OVER(ORDER BY [DateCreated] DESC)
FROM dbo.DUTs D
INNER JOIN dbo.Statuses S ON D.StatusID = S.StatusID
WHERE S.Description = 'Active'
)
SELECT *
FROM AllDUTs
WHERE AllDUTs.DateCreatedRank = 20;
+0
谢谢大家,及时回复。我得到了它的工作。再次感谢。 – user2329418
答
SELECT * FROM (SELECT * FROM EMP ORDER BY ROWID DESC) WHERE ROWNUM<11
答
它的另一个示例:
SELECT * ,CASE WHEN COUNT(0)OVER() =ROW_NUMBER()OVER(ORDER BY number) THEN 1 ELSE 0 END IsNth
FROM (
select top 10 *
from master.dbo.spt_values AS d
where d.type='P'
) AS t
+------+--------+------+-----+------+--------+-------+ | name | number | type | low | high | status | IsNth | +------+--------+------+-----+------+--------+-------+ | NULL | 0 | P | 1 | 1 | 0 | 0 | | NULL | 1 | P | 1 | 2 | 0 | 0 | | NULL | 2 | P | 1 | 4 | 0 | 0 | | NULL | 3 | P | 1 | 8 | 0 | 0 | | NULL | 4 | P | 1 | 16 | 0 | 0 | | NULL | 5 | P | 1 | 32 | 0 | 0 | | NULL | 6 | P | 1 | 64 | 0 | 0 | | NULL | 7 | P | 1 | 128 | 0 | 0 | | NULL | 8 | P | 2 | 1 | 0 | 0 | | NULL | 9 | P | 2 | 2 | 0 | 1 | +------+--------+------+-----+------+--------+-------+
时退房SQL中的OFFSET关键字。它用于分页记录,但可能对您有用。 – xDJR1875
[我如何获得SQL Server表中的第n行?](https://stackoverflow.com/questions/2273558/how-do-i-get-the-nth-row-in-a- sql-server-table) – Valli