WITH x AS (
SELECT empno, ename, job, sal, hiredate, MAX(sal)OVER(ORDER BY hiredate) max_sal
FROM scott.emp
WHERE job!='PRESIDENT'
), y AS (
SELECT empno, ename, job, sal, hiredate start_date, max_sal,
LEAD(hiredate) OVER(ORDER BY hiredate) end_date
FROM x
WHERE sal=max_sal
), z AS (
SELECT y.*, LEAST(end_date, date'1981-12-31')-start_date days_on_top,
RANK()OVER(ORDER BY LEAST(end_date, date'1981-12-31')-start_date DESC) rk
FROM y
WHERE EXTRACT(YEAR FROM start_date) IN (1980, 1981)
)
SELECT empno,ename,job,sal, start_date "Start Date",
end_date "End Date", days_on_top "Days on Top"
FROM z
WHERE rk=1
EMPNO | ENAME | JOB | SAL | Start Date | End Date | Days on Top | 7566 | JONES | MANAGER | 2975 | 02-APR-81 | 03-DEC-81 | 245 |
---|
WITH x AS (
SELECT empno, ename, job, sal, hiredate, MAX(sal)OVER(ORDER BY hiredate) max_sal
FROM scott.emp
WHERE job!='PRESIDENT'
AND hiredate>=date'1980-01-01'
), y AS (
SELECT empno, ename, job, sal, hiredate start_date,
LEAST(date'1981-12-31', LEAD(hiredate) OVER(ORDER BY hiredate)) end_date
FROM x
WHERE sal=max_sal
)
SELECT empno,ename,job,sal, start_date "Start Date",
end_date "End Date", end_date-start_date "Days on Top"
FROM y
WHERE end_date-start_date=(SELECT MAX(end_date-start_date) FROM y)
EMPNO | ENAME | JOB | SAL | Start Date | End Date | Days on Top | 7566 | JONES | MANAGER | 2975 | 02-APR-81 | 03-DEC-81 | 245 |
---|
WITH e AS (
SELECT empno, ename, sal, job, LEAST(hiredate, date'1981-12-31') hiredate,
MAX(sal)OVER(ORDER BY hiredate) max_sal
FROM scott.emp
WHERE hiredate>=date'1980-01-01'
AND job!='PRESIDENT'
), x AS (
SELECT empno, ename, job, sal, hiredate,
NVL(LEAD(hiredate)OVER(ORDER BY hiredate),date'1981-12-31')-hiredate diff,
NVL(LEAD(hiredate)OVER(ORDER BY hiredate),date'1981-12-31') end_date
FROM e
WHERE sal=max_sal
)
SELECT empno, ename, job, sal, hiredate "Start Date",
end_date "End Date", diff "Days on Top"
FROM x
MODEL RETURN UPDATED ROWS
DIMENSION BY (empno, RANK()OVER(ORDER BY diff DESC) rk)
MEASURES(ename,job,sal, hiredate, end_date, diff, 0 dummy)
RULES(dummy[ANY, 1]=1)
EMPNO | ENAME | JOB | SAL | Start Date | End Date | Days on Top | 7566 | JONES | MANAGER | 2975 | 02-APR-81 | 03-DEC-81 | 245 |
---|
WITH x AS (
SELECT empno, ename, job, sal, hiredate, MAX(sal)OVER(ORDER BY hiredate) max_sal
FROM scott.emp
WHERE job!='PRESIDENT'
), y AS (
SELECT empno, ename, job, sal, hiredate start_date,
LEAST(date'1981-12-31', LEAD(hiredate) OVER(ORDER BY hiredate)) end_date,
LEAST(date'1981-12-31', LEAD(hiredate) OVER(ORDER BY hiredate))-hiredate days_top
FROM x
WHERE sal=max_sal
ORDER BY days_top DESC NULLS LAST, hiredate
)
SELECT *
FROM y
WHERE ROWNUM=1
EMPNO | ENAME | JOB | SAL | START_DATE | END_DATE | DAYS_TOP | 7566 | JONES | MANAGER | 2975 | 02-APR-81 | 03-DEC-81 | 245 |
---|