论坛首页 编程语言技术论坛

用oracle分析函数优化自连接

浏览 1518 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-10  

--查找同一个部门经理下面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;

 

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics