我的任务是弄清楚客户坚持使用我们的平均时间长度。 (特别是从他们成为客户之日起,到他们下订单的时候。)
我并非100%确定我这样做是正确的,但我的想法是将我们进入客户的日期收集到数据库中,然后转到订单表并抓住他们最近的订单日期,转储它们进入临时表,然后计算这两个日期之间的时间长度,然后根据该数字计算平均值。
(我还必须做一些其他的wibbly摇摇欲坠的时间,但这是踢我的屁股的那个) 最终目标是能够说“平均我们的客户坚持我们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
答案 0 :(得分:1)
如果您理解正确,请尝试
SELECT AVG(DATEDIFF(dd, StartDate, EndDate)) AvgTime
FROM #AvgTable
答案 1 :(得分:0)
我的猜测是,由于您将数据存储在临时表中,因此,日期值的整数结果将被隐式转换回日期时间(您无法对其进行平均值)。
不要将平均值存储在临时表中(甚至没有临时表,但这是完全不同的对话)。只需在您的选择中进行差分。