获得意外结果:ORDER BY [ColumnName] ASC OFFSET 0 ROWS FETCH FIRST 1行

时间:2015-04-04 10:31:23

标签: sql-server sql-server-2012

说明 ORDER BY [Column A ] ASC OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY.If [Column A ]的意外分页结果具有相同的值。

注意:我使用SQL Server 2012 Express

条件:

  1. 使用表达式:ORDER BY [Column A] ...

  2. [A列]:所有行都具有相同的值。

  3. 预生产:

    案例1:

    SELECT [Id],[Date]    
    FROM [TestDateoffset]  
    ORDER BY [Date] ASC
    OFFSET 0 ROWS
    

    目前的结果:

    Id   Date 
    ---------------------------------------
    1    2015-01-24 21:40:30.0441628 +07:00 
    2    2015-01-24 21:40:30.0441628 +07:00 
    3    2015-01-24 21:40:30.0441628 +07:00 
    4    2015-01-24 21:40:30.0441628 +07:00
    

    预期结果:

    Id  Date 
    -----------------------------------
    1   2015-01-24 21:40:30.0441628 +07:00 
    2   2015-01-24 21:40:30.0441628 +07:00 
    3   2015-01-24 21:40:30.0441628 +07:00 
    4   2015-01-24 21:40:30.0441628 +07:00
    

    状态:通过

    案例2:

    SELECT [Id],[Date]    
    FROM [TestDateoffset]  
    ORDER BY [Date] ASC
    OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY
    

    实际结果:

    Id   Date
    ---------------------------------------
    2    2015-01-24 21:40:30.0441628 +07:00
    

    预期结果:

    Id  Date
    ---------------------------------------
    1   2015-01-24 21:40:30.0441628 +07:00
    

    状态:失败

    案例3:

    SELECT [Id],[Date]    
    FROM [TestDateoffset]  
    ORDER BY [Date] ASC
    OFFSET 1 ROWS FETCH FIRST 1 ROWS ONLY
    

    实际结果:

    Id   Date
    ---------------------------------------
    2    2015-01-24 21:40:30.0441628 +07:00
    

    预期结果:

    它必须与:

    不同
    Id   Date
    ---------------------------------------
    2    2015-01-24 21:40:30.0441628 +07:00
    

    状态:失败

    如果我运行OFFSET 1 ROWS或OFFSET 2 ROWS,结果总是相同的..:

    Id   Date
    ---------------------------------------
    2    2015-01-24 21:40:30.0441628 +07:00
    

    我的问题:

    1. 这是一个错误吗?

    2. 在案例2中,案例3:它是如何工作的?为什么我总是有第二记录?

    3. 我认为"order""ORDER BY COLUMN ASC"背后的"ORDER BY COLUMN ASC OFFSET 0 ROWS FETCH FIRST 1"流程不同。但我不知道为什么和规则是什么!

1 个答案:

答案 0 :(得分:3)

您在Date上订购,但所有日期都相同,因此SQL Server可以按任意顺序返回行。

要在日期相同的情况下在id订购,您可以使用:

ORDER BY Date, Id OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY
              ^^^^