我正在努力解决逻辑如何处理我正在尝试编写的查询,可以使用一些帮助!
背景: 对重复客户购买的产品进行一些分析,以及随着重复购买次数的增加,产品组合是否会发生变化。作为一次交易的一部分,客户可以走进去购买许多不同的东西。就像在杂货店一样,这是一笔交易,在该交易下购买了许多商品。
所以数据看起来像这样:
CustomerEmail TransactionID LineNumber Item Price Date
bob@aol.com 100 1 Hammer 10.00 1/1/2014
bob@aol.com 100 2 Nails 1.00 1/1/2014
bob@aol.com 100 3 wrench 12.00 1/1/2014
bob@aol.com 110 1 Saw 15.00 1/10/2014
bob@aol.com 120 1 Wood 5.00 1/11/2014
jane@gmail 200 1 Hammer 10.00 1/5/2014
Jim@gmail 200 2 Nails 1.00 1/5/2014
Jim@gmail 300 1 Screws 3.00 1/6/2014
我希望输出看起来像:
CustomerEmail Item Price TransactionNumber
bob@aol.com Hammer 10.00 1
bob@aol.com nails 1.00 1
bob@aol.com wrench 12.00 1
bob@aol.com saw ... 2
bob@aol.com wood 3
jane@gmail hammer 1
jim@gmail nails 1
jim@gmail screws 2
所以基本上是每个客户订单历史记录中的排名,但按每个交易分组。希望这是有道理的。我基本上希望能够通过购买数字购买产品,以便能够说'客户更有可能在他们的第一笔交易中购买锤子,但在随后的交易中钉钉子。希望这是有道理的。
答案 0 :(得分:0)
您可以使用DENSE_RANK
CREATE TABLE temp(
CustomerEmail VARCHAR(50),
TransactionID INT,
LineNumber INT,
Item VARCHAR(50),
PRICE NUMERIC(6,2),
[Date] Date
)
INSERT INTO temp VALUES
('bob@aol.com', 100, 1, 'Hammer', 10.00, '1/1/2014'), ('bob@aol.com', 100, 2, 'Nails', 1.00, '1/1/2014'),
('bob@aol.com', 100, 3, 'wrench', 12.00, '1/1/2014'), ('bob@aol.com', 110, 1, 'Saw', 15.00, '1/10/2014'),
('bob@aol.com', 120, 1, 'Wood', 5.00, '1/11/2014'), ('jane@gmail', 200, 1, 'Hammer', 10.00, '1/5/2014'),
('Jim@gmail', 200, 2, 'Nails', 1.00, '1/5/2014'), ('Jim@gmail', 300, 1, 'Screws', 3.00, '1/6/2014');
--SELECT * FROM temp
SELECT
CustomerEmail,
Item,
Price,
TransactionNumber = DENSE_RANK() OVER(PARTITION BY CustomerEmail ORDER BY Date, TransactionID)
FROM temp
DROP TABLE temp