我有一个包含Date和Order列的表。我想在此表中添加一个名为Batch的列,其填充方式如下:对于每个Date,我们从第一个Order开始,并在一个批处理中对每两个订单进行分组。
这意味着对于本例中Date = 1的记录(前4个记录),前两个记录(Order = 10和Order = 30)将具有批号:Batch = 1,接下来的两个记录(Order = 80且Order = 110)将具有Batch = 2,依此类推。
如果最后剩余记录的数量小于批量大小(本例中为2), 剩余订单将有一个单独的批号,如下例所示,Date = 2的记录数是奇数,因此最后一条记录(第5条记录)将具有Batch = 3.
Date Order
-----------
1 10
1 30
1 80
1 110
2 20
2 30
2 50
2 70
2 120
3 90
Date Order Batch
------------------
1 10 1
1 30 1
1 80 2
1 110 2
2 20 1
2 30 1
2 50 2
2 70 2
2 120 3
3 90 1
答案 0 :(得分:2)
使用分析函数row_number在每个日期内获取行号1,2,3,....然后加一个并除以二:
select
dateid,
orderid,
trunc((row_number() over (partition by dateid order by orderid) +1 ) / 2) as batch
from mytable;