如果要更改两个字段中的任何一个,如果要增加批号,如何在时间顺序表中增量分配批号?这是原始表:
Customer Item Time
A Apples 1:00 PM
A Apples 1:10 PM
A Oranges 1:20 PM
A Apples 1:30 PM
B Oranges 1:40 PM
A Apples 1:50 PM
C Apples 2:00 PM
我想分配一个批号。请注意,前两行被分配了相同的编号,因为它们都是客户A和苹果。请注意,在第四行中,我们返回到具有客户A的苹果,但是它分配了下一个批号,而不是返回到批1:
Customer Item Time Batch
A Apples 1:00 PM 1
A Apples 1:10 PM 1
A Oranges 1:20 PM 2
A Apples 1:30 PM 3
B Oranges 1:40 PM 4
A Apples 1:50 PM 5
C Apples 2:00 PM 6
您可以使用LAG
功能来确定其中一个字段是否更改。使用总和为更改编号:
WITH cte AS (
SELECT *, CASE
WHEN LAG(Customer) OVER (ORDER BY Time) = Customer AND LAG(Item) OVER (ORDER BY Time) = Item THEN 0
ELSE 1
END AS chg
FROM t
)
SELECT *, SUM(chg) OVER (ORDER BY Time) AS batch
FROM cte