WITH CTE AS ( SELECT Emp_Id , Emp_Name , Dept_Id , Salary FROM Employees WHERE Dept_id IN ('I100' , 'I200') ) SELECT * FROM CTE A WHERE Salary = ( SELECTMAX(Salary) FROM CTE B WHERE A.Dept_id = B.Dept_id )
視窗函數解法
1 2 3 4 5 6 7
SELECT * FROM( SELECT A.* , MAX(Salary) OVER(PARTITIONBY Dept_Id) MAXSAL FROM Employees A WHERE Dept_id IN ('I100' , 'I200') ) X WHERE Salary = MAXSAL
select * from ( select * , row_number() over (partition by teamid order by salary desc) as seq from `Salaries.csv` where yearid = 2016 ) where seq = 1 order by salary desc
with cte as ( select 'A001' as emp_id , 1 as dept_id , 5000 as salary union all select 'A002' , 1 , 3000 union all select 'A003' , 1 , 2300 union all select 'B002' , 2 , 2800 union all select 'B001' , 2 , 15000 union all select 'X002' , 3 , 2800 union all select 'X001' , 3 , 15000 union all select 'X003' , 3 , 1500 union all select 'X004' , 3 , 5500 ) select * from ( select * , row_number() over (partition by dept_id order by salary desc) as seq from cte ) x --where seq = 3
實際案例
今天幫忙在 Oracle 上面看看 , 同事不曉得為啥 ORDER BY 的時候出現一個版本號 9 > 1x 的狀況 , 原來是資料型別為字串造成 所以先加上 TO_NUMBER 轉換 , 接著即可找出最大版本號的文件名稱
1 2 3 4 5 6 7 8 9
SELECT DNAME, VER FROM ( SELECT DNAME, VER , ROW_NUMBER() OVER (PARTITION BY DNAME ORDER BY TO_NUMBER(VER) DESC) SEQ FROM DOCS WHERE 1 = 1 AND STATUS = 'RELEASE' AND DTYPE = 'Sheet' ) X WHERE SEQ = 1