这很难解释,但我会尽我所能。
有一个销售表,对于客户购买的每篇文章(简化)都有一行。所以,例如,如果顾客去商店买3件东西,然后另一个顾客买2件东西,那么销售表就是这样的:
ID | CUSTOMER_ID | ARTICLE_ID
1 21 42
2 21 32
3 21 34
4 22 42
5 22 33
问题在于我需要添加两个新列。
TRX_ID(transaction_id):当客户访问商店,购买商品并离开时。
TRX_COR(transaction_correlative):它是交易文章的位置。
结果应该显示:
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),这是第一个要出售或通过paydesk(在这种情况下为42)的项目,等等。
考虑:
我还存储了当天(但不是交易的确切时间)
白天有很多客户
一位客户可以在白天返回,这是一项全新的交易。
两个顾客无法同时购买。
答案 0 :(得分:1)
使用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
在内部查询中,按行号比客户ID减去行号,以得出每个客户每个事务的分组编号。外部查询然后使用此值来分配事务ID(通过DENSE_RANK())和事务相关(通过ROW_NUMBER())