如何将每位员工与其经理联系并选择最低DOB?

时间:2016-08-11 10:00:20

标签: sql oracle

我想在没有经理的经理下选择最老的员工DOB。 的修改 我希望将所有员工组成一名高级经理(在经理上为空)并获得该组的第一个DOB

数据看起来像。

employe_ID  DOB           manager
10001       1-Jan-1988    (NULL)
10010       5-Feb-1989    10001
10100       8-Mar-1990    10010
90001       1-Jan-1987    (NULL)
90010       5-Feb-1986    90001
90100       8-Mar-1987    90010

我想要像

这样的数据
employe_ID  DOB           
10001       1-Jan-1988
10010       1-Jan-1988
10100       1-Jan-1988
90001       5-Feb-1986
90010       5-Feb-1986
90100       5-Feb-1986

由于

1 个答案:

答案 0 :(得分:0)

使用connect by prior, connect_by_rootMIN(DOB) over partition by

select employee_id, MIN(DOB) over (partition by topManager) MINDOBperManager, topManager
  from (
select t.*, connect_by_root employee_id topManager
 from t
 start with manager is null
 connect by prior employee_id = manager) t1

<强>输出

EMPL  MINDOBPERMANAGER    TOPMANAGER
----- ------------------- ----------
10001 01-01-1988 00:00:00      10001
10010 01-01-1988 00:00:00      10001
10100 01-01-1988 00:00:00      10001
90001 05-02-1986 00:00:00      90001
90010 05-02-1986 00:00:00      90001
90100 05-02-1986 00:00:00      90001