0

我有一个包含日期和订单列的表格。我想在此表中添加一个名为 Batch 的列,该列将按如下方式填充:对于每个日期,我们从第一个订单开始,并将每两个订单分组为一个批次。

这意味着对于本例中 Date = 1 的记录(前 4 条记录),前两条记录(Order = 10 和 Order=30)将具有批号:Batch = 1,接下来的两条记录(Order = 80 和Order = 110) 将有 Batch = 2,依此类推。

如果最后剩余记录的数量小于批次大小(本例中为 2),则剩余订单将具有单独的批次编号,如下例所示,日期为的记录数= 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
4

1 回答 1

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;
于 2013-10-30T13:57:21.763 回答