我有下面的Job表,其中有5列。
考虑Job_id是主键,parent_job_id对于父作业将为null,并且我已经给出了DATE列值的数值 为了方便.. 请考虑下表数据
JOB_ID ABC XYZ DATE PARENT_JOB_ID
1 a b 1 null
2 a b 1 1
3 a b 2 1
7 a b 3 1
4 a b 3 null
5 a b 1 4
6 a b 2 4
在此,我需要以这样一种方式进行查询:它应该给我以下结果,
JOB_ID ABC XYZ PQR PARENT_JOB_ID
1 a b 1 null
7 a b 3 1
4 a b 3 null
6 a b 2 4
它们是父作业+仅限最新的子作业(DATE值为最大值)
请帮助/建议。 谢谢
答案 0 :(得分:0)
如果您的数据库支持row_number()
分析函数,那么一种方法是获取
仅限最新的子作业(DATE值为最大值)
使用row_number()
函数。
然后单独获取父作业(... where PARENT_JOB_ID is null
)
然后UNION ALL
来自两个查询。
类似的东西:
select * from (
select JOB_ID, ABC, XYZ, DATE, PARENT_JOB_ID from (
select *, row_number() over(partition by PARENT_JOB_ID order by DATE desc) rn
from your_table
where PARENT_JOB_ID is not null
) t
where rn = 1
union all
select JOB_ID, ABC, XYZ, DATE, PARENT_JOB_ID
from your_table
where PARENT_JOB_ID is null
) t
order by coalesce(PARENT_JOB_ID, JOB_ID) , JOB_ID