2016-03-24 17 views
1

私は3つの列を持つテーブルを作るために探しています: 累積平均

  • A:週
  • B:1週間の平均
  • 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 

Result

私は何を探していますが、列C、各週の累積平均ために、決定することである:は、これは結果です。だから4週目は、1週目から4週目に平均値を取得する必要があります。

ありがとうございます。私が正しくあなたを理解している場合

+0

12週間で1〜4週間必要です – mohan111

答えて

0

、あなたは相関クエリでこれを行うことができます。

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 
+0

@VincentMaloir今すぐお試しください。 – sagi

0

私はそれを少し書き換える必要があったが、それは完璧に動作します:

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 

おかげで再び!