我有一个我正在运行的SQL查询,但我只想选择一个特定的行。例如,假设我的查询是:
Select * from Comments
让我们说这会返回10行,我只想选择此查询返回的第8条记录。我知道我能做到:
Select Top 5 * from Comments
要获取该查询的前5条记录,但我只想选择某条记录,我可以在此查询中添加任何内容(类似于顶部)。
由于
插孔
答案 0 :(得分:9)
这是一个经典的采访问题。
在Ms SQL 2005+中,您可以使用ROW_NUMBER()关键字并使谓词ROW_NUMBER = n
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber = 5;
在SQL2000中,您可以执行类似
的操作SELECT Top 1 *FROM
[tblApplications]
where [ApplicationID] In
(
SELECT TOP 5 [ApplicationID]
FROM [dbo].[tblApplications]
order by applicationId Desc
)
答案 1 :(得分:4)
怎么样
SELECT TOP 1 * FROM
(SELECT TOP 8 * FROM Comments ORDER BY foo ASC)
ORDER BY foo DESC
答案 2 :(得分:2)
首先,您应该说出您正在使用的RDBMS。
其次,你应该仔细考虑你想要完成的事情。关系数据库是基于集合的。通常,集合中元素的顺序无关紧要。在这种情况下,你会想问为什么它很重要,然后看看是否有更好的方法将顺序概念嵌入查询本身。
例如,在SQL Server 2005(和其他RDBMS)中,您可以使用ROW_NUMBER函数根据指定的条件为返回的每一行分配一个序号。然后,您可以根据行号选择行。联机丛书中的示例:
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
答案 3 :(得分:2)
SELECT * FROM comments WHERE ...conditions... LIMIT 1 OFFSET 8
OFFSET对MySQL来说是件好事
答案 4 :(得分:1)
好吧,在T-SQL(SQL Server的方言)中,您可以执行以下操作:
SELECT TOP 1 *
FROM (SELECT TOP 8 *
FROM Table
ORDER
BY SortField)
ORDER
BY SortField DESC
这样你就获得了第8张唱片。
答案 5 :(得分:1)
对于SQL Server 2005:
select rank() OVER (ORDER BY c.subject, c.date) as rank, c.subject, c.date
from comments c
where rank = 8
答案 6 :(得分:1)
我已阅读过问题&您对此的评论将需要接下来的3篇博客评论等。
你的桌子结构如何?
假设您有博客文章ID&注释ID是按每个博客帖子的升序生成的,您可以根据当前的ID进行SELECT。
e.g。如果blogpostId = 101,则按发布的ID获得前3个评论顺序。现在让我们说,你想获得接下来的3条评论 - 你可以在显示的最后一条评论ID到评论ID之间做一个SELECT WHERE commentId - 3
但所有这些都取决于你的表的定义方式。
答案 7 :(得分:1)
在没有ROW_NUMBER()函数的SQL 2000中,您可以使用这样的解决方法:
SELECT CommentsTableFieldList, IDENTITY(INT, 1,1) as seqNo
INTO #SeqComments
FROM Comments
SELECT * FROM #SeqComments
WHERE seqNo = 8
答案 8 :(得分:1)
select top 1 *
from TableName
where ColumnName1 in
(
select top nth ColumnName1
from TableName
order by ColumnName1 desc
)
order by ColumnName1 desc
答案 9 :(得分:0)
从SELECT reference开始,使用LIMIT关键字:
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows
注意:这是针对MySQL的,其他SQL引擎可能有不同的关键字。
答案 10 :(得分:0)
Select from tablename limit nthrow,1;
答案 11 :(得分:0)
试试这个
让我们假设,我们想要选择第5行WC_Video表 并且
Select * from (Select Row_Number() over (Order by Uploadedon) as 'rownumber',* from Wc_Video )as Temp where rownumber=5