【问题标题】:sql statement to return next/previous row of current rowsql语句返回当前行的下一行/上一行
【发布时间】:2012-06-12 16:26:34
【问题描述】:

我相信这在 mysql 中是可能的,但是 sql server 2008 呢?例如:

   **ID             Type**
   11111          dgf-324-fhj
   11111          sdg-654-fhd
   22222          djg-234-dfh
   23333          uoi-738-sdf

如果类型是 PK,假设我的查询返回第一个 11111 行,我如何创建一个 SQL 语句将我解析到下一行或上一行?任何帮助或指向正确方向的方法都会很棒。程序是asp.net/c#/visual studio 2010,谢谢!

【问题讨论】:

    标签: asp.net sql-server sql-server-2008 select


    【解决方案1】:

    请记住,表格代表无序行的集合。因此,除非您指定订单,否则“下一个”和“上一个”的概念没有任何意义。在您的示例中,除非您指定订单,否则不能保证给定的 Select 语句在 sdg-654-fhd 之前返回 dgf-324-fhj。但是,让我们假设按类型排序我们可以使用这样的排名函数:

    With OrderedItems As
        (
        Select Id, Type, Row_Number() Over ( Order By Type ) As Num
        From SourceData
        )
    Select Id, Type
    From OrderedItems
    Where Num = 2
    

    SQL Fiddle 示例

    我还要提一下这种方法存在问题。如果有人在您查询第 1 行后插入一个成为“新”行 2 的新行,您将得到与预期不同的结果。

    【讨论】:

      【解决方案2】:

      看看这个关于分页的答案:What is the best way to paginate results in SQL Server

      如果您想一次执行一行,那么您只需将 RowNum 过滤器一次更改为 1。

      【讨论】:

        猜你喜欢
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        • 1970-01-01
        • 2021-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多