1

我的任务是计算客户坚持使用我们的平均时间长度。(特别是从他们成为客户之日到他们最后一次下订单的时间。)

我不是 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
4

2 回答 2

1

如果理解正确,那就试试吧

SELECT AVG(DATEDIFF(dd, StartDate, EndDate)) AvgTime
  FROM #AvgTable
于 2013-04-12T15:31:57.237 回答
0

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

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

于 2013-04-12T16:10:35.923 回答