【问题标题】:How to make an SQL query to get some specific range of rows from a table如何进行 SQL 查询以从表中获取某些特定范围的行
【发布时间】:2010-06-14 05:41:51
【问题描述】:

如果一个表中有 30 条记录,如何进行 SQL 查询,我想从 12 到 20 中选择行,其中 12 和 20 是行号,而不是 ID?

IDs         Code
5           ABC 
6           SDF
8           WSA
10          FSD
15          IOP
.
.
.
.
80          AWS 

【问题讨论】:

    标签: sql sql-server-2005 tsql


    【解决方案1】:

    如果您使用的是 MS SQL Server,则可以使用 row_number() 函数。

    例子:

    USE AdventureWorks2008R2;
    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;
    

    【讨论】:

      【解决方案2】:

      您使用的是什么 SQL 环境?答案取决于环境。

      另外,记录是如何排序的?它们是按某种方式排序的,还是您希望它们按自然顺序排列?

      查看您的示例并假设您的 ids 列是您希望它们排序的顺序,您可以对 MS SQL Server 使用这样的查询

      select 
        top (20-12) ids, code 
      from 
        [yourtable] 
      where 
        ids in (SELECT TOP 20 id from stoplists order by id) 
      order by 
        ID desc
      

      例如获取您想要的前 X 条记录,然后从该结果集中获取您想要的记录。

      您可以在其他 SQL 语法中实现相同的功能,但语法略有不同。

      【讨论】:

        【解决方案3】:

        这取决于您的 DBMS。 ROW_NUMBER() 是一种标准方式。但它不是非常快速和方便。 您可以使用特殊的 SQL 命令。

        对于 MSSQL 服务器。选择顶部(5)...

        对于 MySQL。 SELECT * FROM table LIMIT 0 , 30(0 是起始位置,30 是行数)。

        对于火鸟。选择前 10 个 ...等等。

        使用http://en.wikipedia.org/wiki/Select_(SQL)#ROW_NUMBER.28.29_window_function,非标准语法。

        【讨论】:

        • 只获取第 50 行和第 60 行?您需要在 SQL Server 中嵌套 2 个 TOP 语句,我可以向您保证 ROW_NUMBER() 比这更快。它也是是标准SQL(虽然我不知道哪个版本)。 'LIMIT'、'TOP' 等是非标准的。
        猜你喜欢
        • 1970-01-01
        • 2014-10-03
        • 2016-08-16
        • 2020-12-25
        • 1970-01-01
        • 2014-06-09
        • 2013-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多