CREATE TABLE salaryByMonth
(
employeeNovarchar2(20),
yearMonth varchar2(6),
salary number
)
SELECT
employeeno,
yearmonth,
salary,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY yearmonth) OVER (PARTITIONBY employeeno) first_salary, --基比分析salary/first_salary
LAG(salary,1,0) OVER (PARTITION BY employeeno ORDER BY yearmonth) ASprev_sal,--环比分析,与上个月份进行比较
LAG(salary,12,0) OVER (PARTITION BY employeeno ORDER BY yearmonth) ASprev_12_sal --同比分析,与上个年度相同月份进行比较
FROM salaryByMonth
ORDER BY employeeno,yearmonth
--SQL常用的算法
SELECT *
FROM salaryByMonth a
WHERE (a.employeeno,a.salary) IN
(
SELECT b.employeeno,max(salary)
FROM salaryByMonth b
GROUP BY b.employeeno
)
--用分析函数替代
SELECT distinct
employeeno,
MAX(salary) OVER (PARTITION BY employeeno) AS max_salary,
FIRST_VALUE(yearmonth)OVER (PARTITION BY employeeno ORDER BY salary DESC) AS high_yearmonth
FROM salaryByMonth