I have a query based on a date with get me the data I need for a given day (lets say sysdate-1):
SELECT TO_CHAR(START_DATE, 'YYYY-MM-DD') "DAY",
TO_CHAR(TRUNC(MOD(ROUND(AVG((END_DATE - START_DATE)*86400),0),3600)/60),'FM00') || ':'
|| TO_CHAR(MOD(ROUND(AVG((END_DATE - START_DATE)*86400),0),60),'FM00') "DURATION (mm:ss)"
FROM UI.UIS_T_DIFFUSION
WHERE APPID IN ('INT', 'OUT', 'XMD','ARPUX')
AND PSTATE = 'OK'
AND TO_CHAR(START_DATE, 'DD-MM-YYYY') = TO_CHAR( sysdate-1, 'DD-MM-YYYY')
AND ROWNUM <= 22
GROUP BY TO_CHAR(START_DATE, 'YYYY-MM-DD');
Gives me this (as expected):
╔════════════╦══════════╗
║ DAY ║ DURATION ║
╠════════════╬══════════╣
║ 2016-02-28 ║ 303║
╚════════════╩══════════╝
Now I'm trying to add a loop to get the results for each day since 10-10-2015. Somehting like this:
╔═══════════╦══════════╗
║ DAY ║ DURATION ║
╠═══════════╬══════════╣
║ 2016-02-28║ 303║
╠═══════════╬══════════╣
║ 2016-02-27║ 294║
╠═══════════╬══════════╣
║ ...║ ...║
╠═══════════╬══════════╣
║ 2015-10-10║ 99║
╚═══════════╩══════════╝
I've tried to put the query inside a loop:
DECLARE
i NUMBER := 0;
BEGIN
WHILE i <= 142
LOOP
i := i+1;
SELECT TO_CHAR(START_DATE, 'YYYY-MM-DD') "DAY",
TO_CHAR(TRUNC(MOD(ROUND(AVG((END_DATE - START_DATE)*86400),0),3600)/60),'FM00') || ':'
|| TO_CHAR(MOD(ROUND(AVG((END_DATE - START_DATE)*86400),0),60),'FM00') "DURATION (mm:ss)"
FROM UI.UIS_T_DIFFUSION
WHERE APPID IN ('INT', 'OUT', 'XMD','ARPUX')
AND PSTATE = 'OK'
AND TO_CHAR(START_DATE, 'DD-MM-YYYY') = TO_CHAR(sysdate - i, 'DD-MM-YYYY')
AND ROWNUM <= 22
GROUP BY TO_CHAR(START_DATE, 'YYYY-MM-DD');
END LOOP;
END;
but I'm getting this error:
Error report -
ORA-06550: line 7, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Can anyone tell me how to accomplish this?