Tôi không hiểu ý của việc sử dụng TO_CHAR(SDATE, 'W')
? Theo tài liệu, điều này được cho là cung cấp cho bạn số tuần trong tháng ...
Dù sao, tôi đã cố gắng đơn giản hóa truy vấn, hy vọng nó vẫn phù hợp với nhu cầu của bạn:
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;
Tái bút:Tôi cũng không thấy điểm khi thực hiện TO_DATE(TO_CHAR(a.SDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD')
, điều này tương đương với a.SDATE
...