从表中选择前N行

时间:2012-02-05 15:17:45

标签: mysql sql sql-server oracle

我正在做一些分页,我需要进行一些查询并获得定义切片的结果形式。 例如:我需要在范围20n<范围内获得所有“顶部”行。 x< 40n等。

SELECT * FROM Reflow  
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC;

现在我需要通过名为ID的列进行滑动。

有任何建议如何?我需要在mysql,mssql和oracle上运行我的查询。

5 个答案:

答案 0 :(得分:48)

假设您的页面大小为20条记录,并且您想要获得第2页,那么您可以采用以下方式:

SQL Server,Oracle:

SELECT *   -- <-- pick any columns here from your table, if you wanna exclude the RowNumber
FROM (SELECT ROW_NUMBER OVER(ORDER BY ID DESC) RowNumber, * 
      FROM Reflow  
      WHERE ReflowProcessID = somenumber) t
WHERE RowNumber >= 20 AND RowNumber <= 40    

MySQL的:

SELECT * 
FROM Reflow  
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC
LIMIT 20 OFFSET 20

答案 1 :(得分:21)

在MySql中,您可以使用以下命令从第20行开始获取10行:

SELECT * FROM Reflow  
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC
LIMIT 10 OFFSET 20 --Equivalent to LIMIT 20, 10

答案 2 :(得分:0)

select * from table_name LIMIT 100

请记住,这仅适用于MYSQL

答案 3 :(得分:0)

您还可以检查此链接

选择*从master_questionquestion_id的ASC限制20中进行排序

for more detail click here

答案 4 :(得分:0)

在SQL Server 2012中,您可以使用本机分页,以实现简洁性和最佳性能:

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-ver15#using-offset-and-fetch-to-limit-the-rows-returned

您的查询成为:

SELECT * FROM Reflow  
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC;
OFFSET 20 ROWS  
FETCH NEXT 20 ROWS ONLY;  
相关问题