计算填充临时表后的平均值
问题描述:
我的任务是确定我们的客户与我们保持的平均时间长度。 (特别是从他们成为客户的日期,到他们最后一次下单的时间。)计算填充临时表后的平均值
我不是100%确定我正在做这件事,但我的想法是收集我们进入客户的日期数据库,然后转到订单表并获取他们最近的订单日期,将它们转储到临时表中,然后计算这两个日期之间的时间长度,然后根据该数字计算平均值。
(我必须做一些其他的抖动抖动时间的东西,但这是一个踢我的屁股) 最终目标是能够说“平均我们的客户坚持我们4年,3个月“。 (或任何数据显示的那样。)
SELECT * INTO #AvgTable
FROM(
SELECT DISTINCT (c.CustNumber) AS [CustomerNumber]
, COALESCE(convert(VARCHAR(10),c.OrgEnrollDate,101),'') AS [StartDate]
, COALESCE(CONVERT(VARCHAR(10),MAX(co.OrderDate),101),'')AS [EndDate]
,DATEDIFF(DD,c.OrgEnrollDate, co.OrderDate) as [LengthOfTime]
FROM dbo.Customer c
JOIN dbo.CustomerOrder co ON c.ID = co.CustomerID
WHERE c.Archived = 0
AND co.Archived =0
AND c.OrgEnrollDate IS NOT NULL
AND co.OrderDate IS NOT NULL
GROUP BY c.CustNumber
, co.OrderDate 2
)
--This is where I start falling apart
Select AVG[LengthofTime]
From #AvgTable
答
我的猜测是,既然你是存储在一个临时表中的数据,该datediff的整数结果隐式转换回日期时间(不能平均)。
不要将平均值存储在临时表中(甚至没有临时表,但这是完全不同的对话)。只要在你的选择中做差异。
答
如果理解正确的话,那么就尝试
SELECT AVG(DATEDIFF(dd, StartDate, EndDate)) AvgTime
FROM #AvgTable
+0
我修改了脚本,将DateDiff放在主插入到临时表中。 AVG部分是什么踢我的屁股,以便我可以拉动整个[LengthOfTime]列的AVG。 此外,我试图从插入它后,从临时表中拉出任何数据时,出现奇怪的错误。 – Barnie
除了你的sql语句的技巧之外,要小心你得出的结论:4年前注册的一些客户今天发布一个订单可能'坚持'到你的公司远远少于访问你店铺的客户过去2个月订购5次。至少在报告中添加差异。甚至更好,在你的分析中纳入订单的频率(例如,聚合类型的客户:'稀有访客','约翰·多伊','购物者')。当然,所有的意见,恕我直言。 – collapsar