填充临时表后计算平均值

时间:2013-04-12 15:18:38

标签: sql sql-server sql-server-2008

我的任务是弄清楚客户坚持使用我们的平均时间长度。 (特别是从他们成为客户之日起,到他们下订单的时候。)

我并非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

2 个答案:

答案 0 :(得分:1)

如果您理解正确,请尝试

SELECT AVG(DATEDIFF(dd, StartDate, EndDate)) AvgTime
  FROM #AvgTable

答案 1 :(得分:0)

我的猜测是,由于您将数据存储在临时表中,因此,日期值的整数结果将被隐式转换回日期时间(您无法对其进行平均值)。

不要将平均值存储在临时表中(甚至没有临时表,但这是完全不同的对话)。只需在您的选择中进行差分。