用oracle分析函数优化自连接

--查找同一个部门经理下面empno最大的那条record

SELECT T1.*
  FROM EMP T1
 WHERE T1.EMPNO = (SELECT MAX(T2.EMPNO) FROM EMP T2 WHERE T1.MGR = T2.MGR)
 ORDER BY T1.MGR;

上面的可以使用over(partition by...),获取max(EMPNO),这样写法大大优化性能,数据量越大,效果越明显

WITH EMP_W AS(
  SELECT TP.*, MAX(EMPNO) OVER(PARTITION BY MGR) MAX_EMPNO
    FROM EMP TP
   WHERE TP.MGR IS NOT NULL)
    SELECT * FROM EMP_W A WHERE A.EMPNO = A.MAX_EMPNO ORDER BY A.MGR;

猜你喜欢

转载自kingtoon.iteye.com/blog/1628492
今日推荐