获取同一个表中的最大子作业记录

时间:2017-09-21 16:15:24

标签: sql

我有下面的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值为最大值)

请帮助/建议。 谢谢

1 个答案:

答案 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