【发布时间】:2017-08-10 06:30:29
【问题描述】:
我正在根据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 列。我只想要记录,因为它们没有顺序地插入到表中。
可以这样做吗?
注意:-
我创建了一个同步客户端数据库的实用程序。所以数据库每次都会不同,不能保证标识列。我只是映射列并在我的查询中使用它们。
【问题讨论】:
-
您有 IDENTITY 列吗?如果你没有那么它是不可能做到的。如果你有,那么你可以按 IDENTITY 列排序。
-
我只想要记录,因为它们被插入到没有排序的表中 - 关系表中的行永远不会有隐式的、系统给定的排序 - 根本没有排序.因此,如果您不关心排序,您可以使用
ORDER BY NEWID()来获得随机排序并因此编号。ROW_NUMBER函数中的ORDER BY子句是必需的(根据文档) -
@marc_s 我刚刚用 ROW_NUMBER blog.sqlauthority.com/2015/05/05/…得到了这个技巧
-
ROW_NUMBER 是查询运行时计算的临时值。要在表中保留数字,请参阅 IDENTITY 属性和 SEQUENCE。 --> docs.microsoft.com/en-us/sql/t-sql/functions/…
-
为什么要避免指定订单?
标签: sql sql-server