我如何获得前一个日期的平均值并更新它?

时间:2014-04-13 05:24:52

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

我想编写一个具有平均值(不会很难)的查询,但是当我得到平均值时,我想将它保存在某个地方。让我从上个月开始平均保存table_a.last_month_average。现在我再次运行查询,这将是current_month_average。我想比较这两列,看看current_month_average是否从last_month_average增加。

在我比较之后,我想从这两个中输出最大的平均数。在我这样做之后,我想将current_month_average移动到last_month_average,以便在下个月查询运行时,它变为旧的平均值。

这可能在sql中吗?或者有更好的方法可以做到这一点?任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

  

在我比较之后,我想从这两个中输出最大的平均数。在我这样做之后,我想将current_month_average移动到last_month_average,以便在下个月查询运行时,它变为旧的平均值。

据我了解,此操作是从所有历史记录中选择最大month_average。因此,您不需要记录current_month_average和last_month_average。相反,所有历史月平均值的表格都很有用。假设有一个名为 monthaverage 的表,其中包含列(Id,Month,Average),您可以查询

SELECT TOP 1 T1.*
    , CASE WHEN 
        T1.Average > (SELECT TOP 1 T2.Average 
                      FROM monthaverage T2
                      WHERE T2.Month < T1.Month 
                      ORDER BY Month DESC) 
      THEN 'Increased' 
      ELSE 'Not Increased' 
      END
FROM monthaverage T1
ORDER BY T1.Average DESC

如果您有机会从SQL SERVER 2012运行它,则可以利用LAST_VALUE函数。查询就像

SELECT TOP 1 *, CASE WHEN Average > LAST_VALUE(Average) OVER (ORDER BY Month) THEN 'Increased' ELSE 'Not Increased' END
FROM monthaverage
ORDER BY Average DESC