【问题标题】:Cumulative average累积平均值
【发布时间】:2016-07-11 20:05:01
【问题描述】:

我正在寻找一个包含三列的表格:

  • A:周
  • B:一周的平均值
  • C:累积平均值

这是我的代码到目前为止的样子:

SELECT  
SubSQLQuery.DocWeek as "Week",
AVG(SubSQLQuery.AvePayDelay)  as "Average"

from (SELECT
    UPPER(ch.HID) as CodeClient,
    ch.HDOCNO as DocNumber,
    ch.HDOCDATE as DocDate,
    ch.HYEAR as DocYear,
    week(ch.HDOCDATE)-1 as DocWeek,
    ch.HMDATE as PayDate,
    month(ch.HMDATE) as PayMonth,
    (ch.HDUEDATE-ch.HDOCDATE) +0.00 as AvePayDelay

from AC_CHISTO ch

where ch.HFYEAR='2016'
and ch.HMDATE IS NOT NULL
and UPPER(ch.HDBK)='VEN') as SubSQLQuery
GROUP BY SubSQLQuery.DocWeek

结果如下:

我正在寻找的是确定 C 列的每周累积平均值。所以对于第 4 周,我需要得到第 1 周到第 4 周的平均值。

感谢您的帮助。

【问题讨论】:

  • 你有 12 周,为什么你只需要 1 到 4 周

标签: sql-server average


【解决方案1】:

我不得不稍微改写一下,但效果很好:

  SELECT s.DocWeek,
     s.AverageCol,
     (SELECT AVG((ch2.HDUEDATE - ch2.HDOCDATE) + 0.00) 
      FROM AC_CHISTO ch2
      where ch2.HFYEAR = '2016' 
      and ch2.HMDATE IS NOT NULL
      and UPPER(ch2.HDBK) = 'VEN' 
      and (week(ch2.HDOCDATE) -1) <= s.DocWeek
       ) as CumAvg
  FROM(
  SELECT week(ch.HDOCDATE) - 1 as DocWeek,
         AVG((ch.HDUEDATE - ch.HDOCDATE) + 0.00) as AverageCol
  from AC_CHISTO ch
  where ch.HFYEAR = '2016'
  and ch.HMDATE IS NOT NULL
  and UPPER(ch.HDBK) = 'VEN'
  GROUP BY week(ch.HDOCDATE) - 1) s

再次感谢!

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以使用相关查询来做到这一点:

      SELECT s.DocWeek,
             s.AverageCol.
             (SELECT AVG((ch2.HDUEDATE - ch2.HDOCDATE) + 0.00) 
              FROM AC_CHISTO ch2
              where ch2.HFYEAR = '2016' and ch2.HMDATE IS NOT NULL
                and UPPER(ch2.HDBK) = 'VEN' and (week(ch2.HDOCDATE) -1) <= (week(s.HDOCDATE) - 1)
               ) as CumAvg
      FROM(
          SELECT week(ch.HDOCDATE) - 1 as DocWeek,
                 AVG((ch.HDUEDATE - ch.HDOCDATE) + 0.00) as AverageCol,
          from AC_CHISTO ch
          where ch.HFYEAR = '2016'
                and ch.HMDATE IS NOT NULL
                and UPPER(ch.HDBK) = 'VEN'
          GROUP BY week(ch.HDOCDATE) - 1) s
    

    【讨论】:

    • @VincentMaloir 立即尝试。
    猜你喜欢
    • 2012-06-19
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2017-09-28
    • 2016-05-28
    相关资源
    最近更新 更多