我现在有3列的数据集。
第1列是订单号,它本身是顺序的,也是外键 第2列是批号,它是一个完整的序列。 第3列是时间戳
我遇到的问题如下
Order Batch TimeStamp
1 1
2 2
1 3
3 4
2 5
1 6
我正在尝试计算每个订单批次之间的时差。 通常我得到序号为PER orderid,但事实并非如此。我正在尝试创建一个可以执行此操作的视图,但我的第一个障碍是将这些批处理序列转换为序列号PER Order
我理想的输出
Order Batch SequenceNumber TimeStamp
1 1 1
2 2 1
1 3 2
3 4 1
2 5 2
1 6 3
所有帮助表示赞赏!!
答案 0 :(得分:0)
这是row_number()
的作用:
select t.*, row_number() over (partition by order order by batch) as seqnum
from t;
注意:您必须转义列名order
,因为它是SQL保留字。不要将保留字用于列名。
row_number()
是大多数数据库中可用的ANSI标准功能(您的问题没有数据库标记)。还有其他方法可以做到这一点,但row_number()
是最简单的。