sql >> Base de Datos >  >> RDS >> Oracle

Promedio móvil de Oracle

No entiendo cuál es el punto de usar TO_CHAR(SDATE, 'W') ? De acuerdo con el documento, se supone que esto le dará el número de semana en el mes...

De todos modos, traté de simplificar la consulta, con la esperanza de que aún se ajuste a sus necesidades:

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;

PD:tampoco veo el sentido de hacer TO_DATE(TO_CHAR(a.SDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') , esto es equivalente a a.SDATE ...