Oracle
 sql >> Base de données >  >> RDS >> Oracle

Moyenne mobile Oracle

Je ne comprends pas à quoi sert d'utiliser TO_CHAR(SDATE, 'W') ? D'après la doc, c'est censé vous donner le numéro de la semaine dans le mois...

Quoi qu'il en soit, j'ai essayé de simplifier la requête, en espérant qu'elle corresponde toujours à vos besoins :

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 :je ne vois pas non plus l'intérêt de faire TO_DATE(TO_CHAR(a.SDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') , cela équivaut à a.SDATE ...