【发布时间】:2021-02-04 10:43:23
【问题描述】:
我有以下数据库架构:
Purchases [PurchaseID, CustomerID, Date...]
PurchasesReturns [PurchaseReturnID, PurchaseID, ...]
Purchases 包含大量行,而 PurchasesReturns 少得多。
我想计算一下,对于曾经进行过购买退货的每一位客户(并且只针对他们!),从他们第一次购买到每次购买退货的天数。输出示例:
PurchaseID | CustomerID | DaysFromCustomersFirstPurchase
--------------------------------------------------------
1001| 1| 215
1002| 1| 216
1003| 1| 218
1004| 2| 184
1005| 2| 188
1007| 4| 24
1008| 5| 102
注意 - 以上所有购买都已退回(它们的 ID 在 PurchasesReturns 表中)
注意 - 购买 1001,1002,1003 是在不同的日期进行的,因此从客户 1 进行第一次购买之日起的天数是不同的。
注意 - ID 3 的客户从未进行过购买退货,因此他的购买不存在。
我做了类似的事情,但我不确定这是正确的,并且肯定没有效率 - 它永远不会结束(几个小时的测试)。
SELECT s1.PurchaseID, s1.CustomerID,
FIRST_VALUE(s1.[Date]) OVER (PARTITION BY s1.CustomerID ORDER BY s1.Date) AS [Date]
FROM (SELECT s2.PurchaseID, s2.CustomerID, s2.[Date]
FROM Purchases s2
WHERE s2.CustomerID IN
(SELECT DISTINCT s3.CustomerID
FROM Purchases s3
WHERE s3.PurchaseID IN
(SELECT s4.PurchaseID FROM PurchasesReturns s4))) s1
另外 - 我只尝试获取第一次购买的日期,我必须添加天数。
感谢您的每一个建议。
【问题讨论】:
标签: sql sql-server tsql