SQL-有2个数字列。尝试用序列替换上下文编号

时间:2014-08-06 19:02:52

标签: sql cursor sequence

我现在有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

所有帮助表示赞赏!!

1 个答案:

答案 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()是最简单的。