问一个关于树节点查询的语句。。
WBS表 有 wbsid ,parentid
TASK表 有 taskid , wbsid
WBS下面有子WBS
子WBS 下面有 TASK
TASK是最底层节点
TASK表里有时间信息
我要查 一个 WBS 节点 下面 所有TASK 的 最大时间。。
关键是要找出来 这个WBS 下的 所有子WBS 下的TASK 。。。
请大神帮忙写下呗?
------解决方案--------------------
引用:WBS表 有 wbsid ,parentid
TASK表 有 taskid , wbsid
WBS下面有子WBS
子WBS 下面有 TASK
TASK是最底层节点
TASK表里有时间信息
我要查 一个 WBS 节点 下面 所有TASK 的 最大时间。。
关键是要找出来 这个WBS 下的 所有子WBS 下的TASK 。。。
请大神帮忙写下呗?
也不知道是不是你想要的,你最后能够通过简单的数据来描述你想要的结果:
with WBS AS
(select 1 wbsid, null parentid
from dual
union all
select 2 wbsid, 1 parentid
from dual
union all
select 3 wbsid, 2 parentid
from dual
union all
select 4 wbsid, 3 parentid
from dual
union all
select 5 wbsid, 4 parentid from dual),
task as
(select 10 taskid, 1 wbsid
from dual
union all
select 20 taskid, 2 wbsid
from dual
union all
select 30 taskid, 3 wbsid
from dual
union all
select 40 taskid, 4 wbsid
from dual
union all
select 50 taskid, 5 wbsid from dual)
select *
from task,
(select *
from wbs
start with wbsid = 3
connect by parentid = prior wbsid) t1
where task.wbsid = t1.wbsid;
------解决方案--------------------
引用:WBS表 有 wbsid ,parentid
TASK表 有 taskid , wbsid
WBS下面有子WBS
子WBS 下面有 TASK
TASK是最底层节点
TASK表里有时间信息
我要查 一个 WBS 节点 下面 所有TASK 的 最大时间。。
关键是要找出来 这个WBS 下的 所有子WBS 下的TASK 。。。
请大神帮忙写下呗?
SELECT MAX(TASK表中的时间)
FROM (SELECT WBSID
FROM WBS
START WITH WBSID = 你要查询的WBSID
CONNECT BY PARENTID = PRIOR WBSID) WBS,
TASK
WHERE WBS.WBSID = TASK.WBSID(+)
------解决方案--------------------
用wbsid=1为例子,查找父节点wbsid为1的任务的最大时间日期(其他的类型类似):
wbs数据:
task数据:
select c.parentid, max(c.task_date)
from (select b.taskid, a.wbsid, a.parentid, b.task_date
from (select wbsid, parentid from wbs where parentid = 1) a,
task b
where a.wbsid = b.wbsid) c
group by c.parentid;
运行结果: