根据客户区分交易,给定销售额 table (customer_id, article_id)

Differentiate transactions by customer, given sales table (customer_id, article_id)

这很难解释,但我会尽力而为。

有一个 sales table,客户购买的每件商品都有一行(已简化)。因此,例如,如果一位顾客去商店买了 3 件东西,然后另一位顾客买了 2 件东西,那么销售额 table 将如下所示:

ID  |  CUSTOMER_ID | ARTICLE_ID 
1          21            42
2          21            32
3          21            34
4          22            42
5          22            33

问题是我需要添加两个新列。

结果应该是这样的:

ID  |  CUSTOMER_ID | ARTICLE_ID | TRX_ID | TRX_COR
1          21            42         1        1
2          21            32         1        2
3          21            34         1        3
4          22            42         2        1
5          22            33         2        2

根据这些信息,我可能知道实际有多少笔交易(在本例中为 2 个),哪个是第一个出售的商品,或通过付款台(在本例中为 42 个)等等。

注意事项:

类似下面的东西,它使用 window aggregates,(我认为)应该按照您请求的方式计算 ID。

SELECT ID, Customer_ID, Article_ID,
    DENSE_RANK() OVER (ORDER BY Customer_ID, Gr) AS TRX_ID,
    ROW_NUMBER() OVER (PARTITION BY Customer_ID, Gr ORDER BY ID) AS TRX_COR 
FROM (
    SELECT *, 
        ROW_NUMBER() OVER (ORDER BY ID)-ROW_NUMBER() OVER (ORDER BY Customer_ID, ID) AS Gr
    FROM [Test].[dbo].[Netezza]
) data

在内部查询中,行号减去 row-number-by-customer-than-id 以得出每个客户每个交易的分组号。外部查询然后使用此值分配事务 ID(通过 DENSE_RANK()) and transaction correlative (via ROW_NUMBER()