Sql 填充临时表后计算平均值

Sql 填充临时表后计算平均值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的任务是计算客户与我们相处的平均时间。(特别是从他们成为客户之日起,到他们下最后一次订单之时。) 我不能100%确定我是否做得正确,但我的想法是收集我们将客户输入数据库的日期,然后前往订单表,获取他们最近的订单日期,将其转储到临时表中,然后计算这两个日期之间的时间长度,然后根据这个数字统计平均值 (我还得做一些其他的肌肉不稳的时间动作,但这就是那个踢我屁股的动作) 这样做的最终目标是能够说“平均而言,我们的客户与我们在一起的时间为4年零3个月。”(或者数据显示的任何情况) 如果你理解正确,那就

我的任务是计算客户与我们相处的平均时间。(特别是从他们成为客户之日起,到他们下最后一次订单之时。)

我不能100%确定我是否做得正确,但我的想法是收集我们将客户输入数据库的日期,然后前往订单表,获取他们最近的订单日期,将其转储到临时表中,然后计算这两个日期之间的时间长度,然后根据这个数字统计平均值

(我还得做一些其他的肌肉不稳的时间动作,但这就是那个踢我屁股的动作) 这样做的最终目标是能够说“平均而言,我们的客户与我们在一起的时间为4年零3个月。”(或者数据显示的任何情况)


如果你理解正确,那就试试看

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

如果你理解正确,那就试试看

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

我猜想,由于您将数据存储在临时表中,datediff的整数结果将隐式转换回datetime(您不能在其中平均值)


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

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


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

我修改了脚本,将DateDiff放在Temp表的主插入中。AVG部分是我最讨厌的部分,这样我就可以绘制整个[LengthOfTime]列的AVG。此外,在插入临时表之后,尝试从临时表中提取任何数据时,我遇到了一个奇怪的错误。我修改了脚本,将DateDiff放在临时表的主插入中。AVG部分是我最讨厌的部分,这样我就可以绘制整个[LengthOfTime]列的AVG。此外,在插入临时表之后,尝试从临时表中提取任何数据时,我也遇到了一个奇怪的错误。除了sql语句的技术细节之外,对你得出的结论要小心:一些4年前注册的客户今天只下了一个订单,他们对你公司的“坚持”程度可能比过去2个月来你商店订购5次的客户要低得多。至少在你的报告中添加差异。更好的是,在分析中加入订单频率(例如,客户类型的合计:“稀有访客”、“john doe”、“超级顾客”)。当然,所有的意见都是这样。除了sql语句的技术性之外,请注意您得出的结论:一些4年前注册的客户今天只下了一个订单,可能会“坚持”到您的公司,而不是过去2个月内访问您的商店订购5次的客户。至少在你的报告中添加差异。更好的是,在分析中加入订单频率(例如,客户类型的合计:“稀有访客”、“john doe”、“超级顾客”)。当然,所有意见都是imho。DateDiff不返回INT吗?MSDN说是这样的,所以我假设当它插入到Temp中时,它会将其保持为Int。如果没有Temp表,您将如何执行上述操作?这似乎是处理这个问题最简单的方法。@Barnie:我想你是在陈述表格的结构,但只是没有在你的问题中显示出来。从临时表中选择一个*进行检查。是的,我刚刚做了这个,它工作得非常好。我真的想动态地填充它,而不是声明它。谢谢你的帮助!我还无法投票,但我会将此标记为正确答案DateDiff不返回INT?MSDN说是这样的,所以我假设当它插入到Temp中时,它会将其保持为Int。如果没有Temp表,您将如何执行上述操作?这似乎是处理这个问题最简单的方法。@Barnie:我想你是在陈述表格的结构,但只是没有在你的问题中显示出来。从临时表中选择一个*进行检查。是的,我刚刚做了这个,它工作得非常好。我真的想动态地填充它,而不是声明它。谢谢你的帮助!我还不能投票,但我会把这个标记为正确答案