【发布时间】:2015-06-24 16:08:15
【问题描述】:
我有一个包含重复事务记录的表。这些不是错误的重复项,但需要为它们分配值以使它们对表唯一。记录的用途是随着时间的推移按顺序查看它们,我使用 ROW_NUMBER 按 ID 和 ORDER BY Time 对它们进行分区。
有时它会起作用。有时会失败。
示例
CASE WHEN [Record] = 'Start'
THEN 0
ELSE -1 + ROW_NUMBER() OVER(PARTITION BY [ID] ORDER BY [Date] DESC
END AS [RowNo]
预期结果
ID, Date, RowNo
2002, 12:30, 1
2002, 12:29, 2
2002, 12:29, 3
2002, 12:29, 4
2002, 12:28, 5
3212, 01:10, 1
3212, 01:09, 2
3212, 01:08, 3
实际结果
ID, Date, RowNo
2002, 12:30, 1
2002, 12:29, 2 <---Right
2002, 12:29, 2 <---Wrong
2002, 12:29, 3 <---Right
2002, 12:28, 4
3212, 01:10, 1
3212, 01:09, 2
3212, 01:08, 3
有没有更好的方法来确保准确性?
【问题讨论】:
-
你确定你使用的是rownumber而不是rank,dense rank吗?行号以 1 开头。您没有向我们展示实际的语句...
-
是的。那是我的错。实际上,我有一个 CASE 语句,其原始代码根据示例中未显示的另一个字段将第一条记录从 1 更改为 0。
-
显示实际代码。您当前的代码应该可以工作...
-
更新清晰。
-
仍然很难判断出了什么问题。您能否提供一些数据以便我们重现该行为?
标签: sql-server sql-server-2008 tsql