我有一个简单的表,其中包含客户电子邮件,他们的订单数(因此,如果这是他们的第一笔订单,第三笔订单,第五笔订单等),订单的创建日期,该订单的价值以及总订单为那个客户计数。
这是我的桌子的样子
Email Order Date Value Total
r2n1w@gmail.com 1 12/1/2016 85 5
r2n1w@gmail.com 2 2/6/2017 125 5
r2n1w@gmail.com 3 2/17/2017 75 5
r2n1w@gmail.com 4 3/2/2017 65 5
r2n1w@gmail.com 5 3/20/2017 130 5
ation@gmail.com 1 2/12/2018 150 1
ylove@gmail.com 1 6/15/2018 36 3
ylove@gmail.com 2 7/16/2018 41 3
ylove@gmail.com 3 1/21/2019 140 3
keria@gmail.com 1 8/10/2018 54 2
keria@gmail.com 2 11/16/2018 65 2
我想做的是计算每个客户购买之间的平均时间。因此,让我们来吸引客户。首次购买日期为6/15/18。下一个是7/16/18,所以31天,下一次购买是在1/21/2019,所以189天。订单之间的平均购买时间为110天。
但是我不知道如何让SQL查看下一行并基于该行进行计算,但是在遇到新客户时重新启动。
这是我要获取该表的查询:
SELECT
F.CustomerEmail
,F.OrderCountBase
,F.Date_Created
,F.Total
,F.TotalOrdersBase
FROM #FullBase F
ORDER BY f.CustomerEmail
如果有人可以给我一些建议,将不胜感激。
然后也许我可以计算出差异值(百分比)。因此,例如,ylove在他们的第一笔订单上花费了36美元,在他们的第二笔订单上花费了41美元,增长了13%。然后他们的第二笔订单是$ 140,增加了341%。因此,该客户平均将采购订单价值提高了177%。与SQL无关,但这是计算指标的正确方法吗?
答案 0 :(得分:2)
寻找样品,您可以尝试使用差异形式的最小和最大日期除以总计
select email, datediff(day, min(Order_Date), max(Order_Date))/(total-1) as avg_days
from your_table
group by email
并且仅用于管理一个订单
select email,
case when total-1 > 0 then
datediff(day, min(Order_Date), max(Order_Date))/(total-1)
else datediff(day, min(Order_Date), max(Order_Date)) end as avg_days
from your_table
group by email
答案 1 :(得分:1)
最简单的公式是:
select email,
datediff(day, min(Order_Date), max(Order_Date)) / nullif(total-1, 0) as avg_days
from t
group by email;
您可以看到这种情况。考虑以od1,od2和od3作为订单日期的三个订单。平均值是:
( (od2 - od1) + (od3 - od2) ) / 2
检查算术:
--> ( od2 - od1 + od3 - od2 ) / 2
--> ( od3 - od1 ) / 2
这显然可以推广到更多订单。
因此将max()
减去min()
。