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
...