【发布时间】:2021-12-11 16:34:58
【问题描述】:
我想在用户历史记录表中进行递归查询。我尝试使用以下查询,它只给出一条记录。由于它是一个历史表,因此特定用户将有多个具有生效日期的记录。
WITH superVis(EMPLID,CH_SUPV_ID) AS (
SELECT A.EMPLID,A.CH_SUPV_ID
FROM PSOFTUDB.PS_CH_RPTS_TO_TBL A WHERE A.EMPLID = @Param AND A.EFFDT = (select MAX(A2.EFFDT) from PSOFTUDB.PS_CH_RPTS_TO_TBL A2 WHERE A2.EMPLID = A.EMPLID)
UNION ALL
SELECT e.EMPLID,e.CH_SUPV_ID FROM
PSOFTUDB.PS_CH_RPTS_TO_TBL e,superVis o where
o.CH_SUPV_ID = e.EMPLID
) select * from superVis;
我希望具有受人尊敬的经理的用户层次结构。我能够在 DB2 中实现这一点。将其更改为 oracle 时出现错误。
当前经理的最新生效日期是要在查询中使用的数据。
样本数据:
EMPLID CH_SUPV_ID EFFDT
1844854 1730352 2020-12-03 00:00:00
1730352 1461958 2018-12-17 00:00:00
1461958 246001 2014-02-04 00:00:00
1461958 954507 2021-06-10 00:00:00
246001 123345 1999-04-12 00:00:00
246001 17139 1999-08-23 00:00:00
246001 18382 2004-04-13 00:00:00
246001 18442 2007-07-27 00:00:00
954507 971510 2019-05-01 00:00:00
预期输出:
EMLID CH_SUPV_ID EFFDAT
1844854 1730352 2020-12-03 00:00:00
1730352 1461958 2018-12-17 00:00:00
1461958 954507 2021-06-10 00:00:00
954507 971510 2019-05-01 00:00:00
【问题讨论】:
-
您好,能否提供一些数据给我们进行测试?
-
嗨,我添加了相同的数据。
-
希望得到的结果会很好。
-
我也更新了预期的结果。
标签: sql oracle hierarchy recursive-query