SQL - ROW NUMBER没有Order By

时间:2017-08-10 06:30:29

标签: sql sql-server

我根据Date列的排序在我的查询中创建一个行号。

这是使用的查询:

SELECT * 
FROM 
    (SELECT 
         *, 
         ROW_NUMBER() OVER (ORDER BY datePunch) AS RowNum 
     FROM 
         Tempdata 
     WHERE
         datePunch IS NOT NULL) AS LogTable 
WHERE 
    LogTable.RowNum BETWEEN 800 
                    AND (SELECT COUNT(*) 
                         FROM Tempdata 
                         WHERE datePunch IS NOT NULL)
    AND datePunch IS NOT NULL

现在我想要行号列,但不是通过订购datePunch列。我只是想要记录,因为它们被插入表中而没有排序。

有可能这样做吗?

注意: -

我创建了一个同步客户端数据库的工具。所以数据库每次都不同,不保证身份列。我只是映射列和&在我的查询中使用它们。

1 个答案:

答案 0 :(得分:0)

您似乎希望始终以特定顺序返回您的行(即,#39;它们在表格中插入的顺序')但这不是一个有意义的概念。行没有插入订单,他们如何在内部索引和组织sqlserver并不是开发人员控制的东西所以我建议你忘记有任何特定的行概念有自然秩序。

如果你想要一个稳定的行排序,保证不会根据sql server的索引维护等进行更改,那么你真的需要在表中插入一些数据,以便在查询时对其进行排序。这可以是create_date,递增整数等

一些有趣的浴室阅读材料:https://www.red-gate.com/simple-talk/sql/database-administration/sql-server-storage-internals-101/