按客户区分交易,给定销售表(customer_id,article_id)
这很难解释,但我会尽我所能。按客户区分交易,给定销售表(customer_id,article_id)
有一个销售表,它有一个客户购买(简化)的每一篇文章的行。因此,举例来说,如果客户去商店买3样东西,然后另一个客户买两件事情,销售表会是这样的:
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在这种情况下),而这是将要出售的第一个项目,或通过通过支付台(在这种情况下是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
在内部查询,行号,通过ID是来自行数量按客户比-ID减去拿出每个客户的每笔交易分组数。外部查询然后使用该值来分配交易ID(通过DENSE_RANK())和交易相关性(通过ROW_NUMBER())
@马塞洛,做了上述工作?如果是这样,我将删除我关于T-SQL的文本。 –
上面的工作很棒!我只是编辑了一些小的细节,(它与oracle或mysql没有太大区别)非常感谢你,你明白我需要完美的东西。 – Marcelo
您是如何处理客户进行交易然后立即进行另一个交易的角落案例?如果在上面的例子中,所有5行的客户ID都是相同的,如果它们全部用“TRX_ID 1”标记,是否可以? –
你正在使用哪个SQL DBMS? Microsoft SQL Server 2008/2008 R2/2012/2014? MySQL的? –
@BenGribaudo如果所有人都标有TRX_ID,那就完全可以了1 – Marcelo