Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Gleitender Oracle-Durchschnitt

Ich verstehe nicht, was der Sinn der Verwendung von TO_CHAR(SDATE, 'W') ist ? Laut dem Dokument soll dies Ihnen die Wochennummer im Monat geben ...

Wie auch immer, ich habe versucht, die Abfrage zu vereinfachen, in der Hoffnung, dass sie immer noch Ihren Anforderungen entspricht:

SELECT x.*, ABS (LTMA-STMA) DIFFERENCE
FROM
(
  SELECT SDATE, PAYLOAD,
         AVG(PAYLOAD) OVER (ORDER BY SDATE rows BETWEEN 14 PRECEDING AND CURRENT ROW) STMA,
         AVG(PAYLOAD) OVER (ORDER BY SDATE rows BETWEEN 90 PRECEDING AND CURRENT ROW) LTMA
  FROM
  (
    SELECT a.SDATE, SUM(a.PAYLOAD) PAYLOAD
    FROM TABLE_PAYLOAD a
    WHERE a.SDATE  > sysdate - 3 * 365      
    GROUP BY a.SDATE
  )
) x
ORDER BY SDATE;

PS:Ich sehe auch keinen Sinn darin, TO_DATE(TO_CHAR(a.SDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') zu machen , dies entspricht a.SDATE ...