【问题标题】:get the max child job record in the same table获取同一张表中的最大子作业记录
【发布时间】:2017-09-22 00:52:56
【问题描述】:

我有下面的 Job 表,其中有 5 列。

考虑 Job_id 是主键,而 parent_job_id 对于父作业将为空,我已经给出了 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 值为最大值)

请帮助/建议。 谢谢

【问题讨论】:

    标签: sql


    【解决方案1】:

    如果你的数据库支持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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多