Oracle 未显示 MAX STATUSID

问题描述 投票:0回答:1

我有一个视图,其中多个作业进度 ID 附加到 1 个 JOB_ID。因此,如果有 2 个

JOB PROGRESS ID
,则有 2 个
status_id
。所以我想根据作业进度 id desc 获取最新的状态 id。下面是视图。

CREATE OR REPLACE VIEW "APP_FIPINVRITL"."CMP_PANINDIA_VIEW_AGING_UPD" 
("CIRCLE", "MP", "SPAN_TYPE", "SPAN_LINK_ID", "NE_LENGTH", "ROUTE_ACCEPTED", "LIT_ACCEPTED", "MISSING_ASBUILT", "STATUS", "OFFERED_DATE", "HOTO_ACCEPTED_DATE", "LIT_ACCEPTED_DATE", "ASSIGNED_BY", "ASSIGNED_TO", "JOB_PROGRESS_FLAG", "ROUTE_APPROVED_BY_CMM", "LIT_APPROVED_BY_CMM", "CMM_APPROVED_DATE", "REOFFERFLAG", "NO_OF_DAYS_AGING", "REJECT_REMARKS") AS 
  WITH main_data AS (
        SELECT DISTINCT
            mzb.jiostatename,
            mzb.jiostatecode,
            mzb.maintenancezonename,
            mzb.maintenancezonecode
        FROM
            r4g_lb.mantainenceboundary_evw mzb
           --dual
        ORDER BY
            mzb.jiostatename
    ), hotostatus AS (
        SELECT
            sm.status_id,
            sm.status_name AS status
        FROM
            APP_FIPINVRITL.tbl_fiber_inv_status_master sm
    ), jobs_data AS (
        SELECT DISTINCT
            jb.job_id,
            nvl(
                jb.span_id,
                'NA'
            )                      AS span_id,
            nvl(
                jb.link_id,
                'NA'
            )                      AS link_id,
            nvl(
                jb.fsa_id,
                'NA'
            )                      AS fsa_id,
            CASE
                WHEN jb.span_type = 'INTERCITY'  THEN
                    jb.span_id
                WHEN jb.span_type = 'INTRACITY'  THEN
                    jb.link_id
                WHEN jb.span_type = 'ENTERPRISE' THEN
                    jb.link_id
                WHEN jb.span_type = 'FTTX'       THEN
                    jb.fsa_id
            END                    AS clubed_span,
            jb.maintenancezonecode AS maintenance_code,
            jb.created_date        AS offered_date,
            nvl(
                jb.maint_zone_ne_span_length,
                0
            )                      AS ne_length,
            nvl(
                jb.missing_abd_length,
                0
            )                      AS missing_abd_length,
            jb.span_type,
            jb.job_flag,
            jb.reofferflag
        FROM
            APP_FIPINVRITL.tbl_fiber_inv_jobs jb
  /* WHERE NOT EXISTS
    (SELECT SPAN_LINK_ID
    FROM APP_FIPINVRITL.TBL_FIBER_INV_DROPSPAN kb
    WHERE jb.SPAN_ID=kb.SPAN_LINK_ID
    )
  OR NOT EXISTS
    (SELECT SPAN_LINK_ID
    FROM TBL_FIBER_INV_DROPSPAN.TBL_FIBER_INV_DROPSPAN kb
    WHERE jb.SPAN_ID=kb.SPAN_LINK_ID
    ) */
    ), jobprogress_data AS (
        SELECT
            t.job_id,
            t.status_id,
            t.hoto_actual_length,
            t.lit_actual_length,
            t.hoto_offered_date,
            t.hoto_accepted_date,
            t.lit_accepted_date,
            t.job_progress_flag,
            t.route_accepted_by_cmm,
            t.lit_accepted_by_cmm,
            t.cmm_approved_date,
            t.modified_date,
            t.approv_reject_remark
        FROM
            (
                SELECT DISTINCT
                    jbp.job_progress_id,
                    jbp.job_id,
                    ROW_NUMBER()
                    OVER(PARTITION BY jbp.job_id
                         ORDER BY
                             jbp.job_id
                    )   AS srno,
                    jbp.status_id,
                    SUM(nvl(
                        (
                            CASE
                                WHEN jbp.rejected_by LIKE('%')
                                     AND jbp.ums_group_ass_to_name LIKE('Construction_Engineer_OL')
                                     AND jbp.job_progress_flag = 0 THEN
                                    0
                                ELSE
                                    jbp.hoto_actual_length
                            END
                        ),
                        0
                    ))
                    OVER(PARTITION BY jbp.job_id
                         ORDER BY
                             jbp.job_id
                    )   AS hoto_actual_length,
                    SUM(nvl(
                        (
                            CASE
                                WHEN jbp.rejected_by LIKE('%')
                                     AND jbp.ums_group_ass_to_name LIKE('Construction_Engineer_OL')
                                     AND jbp.job_progress_flag = 0 THEN
                                    0
                                ELSE
                                    jbp.lit_actual_length
                            END
                        ),
                        0
                    ))
                    OVER(PARTITION BY jbp.job_id
                         ORDER BY
                             jbp.job_id
                    )   AS lit_actual_length,
                    hoto_offered_date,
                    MAX(decode(
                        jbp.hoto_acceptence_date,
                        NULL,
                        '01-JAN-01',
                        jbp.hoto_acceptence_date
                    ))
                    OVER(PARTITION BY jbp.job_id
                         ORDER BY
                             jbp.job_id
                    )   AS hoto_accepted_date,
                    MAX(decode(
                        jbp.lit_acceptence_date,
                        NULL,
                        '01-JAN-01',
                        jbp.lit_acceptence_date
                    ))
                    OVER(PARTITION BY jbp.job_id
                         ORDER BY
                             jbp.job_id
                    )   AS lit_accepted_date,
                    jbp.job_progress_flag,
                    SUM(nvl(
                        (
                            CASE
                                WHEN jbp.rejected_by LIKE('%')
                                     AND jbp.ums_group_ass_to_name LIKE('Construction_Engineer_OL')
                                     OR jbp.job_progress_flag = 0 THEN
                                    0
                                ELSE
                                    jbp.hoto_actual_length
                            END
                        ),
                        0
                    ))
                    OVER(PARTITION BY jbp.job_id
                         ORDER BY
                             jbp.job_id
                    )   AS route_accepted_by_cmm,
                    SUM(nvl(
                        (
                            CASE
                                WHEN jbp.rejected_by LIKE('%')
                                     AND jbp.ums_group_ass_to_name LIKE('Construction_Engineer_OL')
                                     --OR jbp.job_progress_flag = 0 THEN
                                     OR jbp.job_progress_flag = 1 THEN
                                    0
                                ELSE
                                    jbp.lit_actual_length
                            END
                        ),
                        0
                    ))
                    OVER(PARTITION BY jbp.job_id
                         ORDER BY
                             jbp.job_id
                    )   AS lit_accepted_by_cmm,
                    CASE
                        WHEN jbp.ums_group_ass_by_name LIKE ( 'CMM_OL' ) THEN
                            jbp.approved_date
                        ELSE
                            NULL
                    END AS cmm_approved_date,
                    jbp.modified_date,
                    jbp.approv_reject_remark
                FROM
                    APP_FIPINVRITL.tbl_fiber_inv_job_progress jbp
                ORDER BY
                    jbp.modified_date ASC
            ) t
        WHERE
            t.srno = 1
    ), assigndata AS (
        SELECT
            job_id,
            assigned_by,
            assigned_to
        FROM
            (
                SELECT DISTINCT
                    x.job_id,
                    decode(
                        y.ums_group_ass_by_name,
                        NULL,
                        'NA',
                        y.ums_group_ass_by_name
                    ) AS assigned_by,
                    decode(
                        y.ums_group_ass_to_name,
                        NULL,
                        'NA',
                        y.ums_group_ass_to_name
                    ) AS assigned_to
                FROM
                    (
                        SELECT
                            y1.job_id,
                            y1.ums_group_ass_to_date,
                            y1.job_progress_flag
                        FROM
                            (
                                SELECT
                                    jp1.job_id,
                                    jp1.job_progress_flag,
                                    ROW_NUMBER()
                                    OVER(PARTITION BY jp1.job_id
                                         ORDER BY
                                             jp1.job_id
                                    )  srno,
                                    MAX(decode(
                                        jp1.ums_group_ass_to_date,
                                        NULL,
                                        TO_DATE('01-01-1801',
                                        'DD-MM-YYYY'),
                                        jp1.ums_group_ass_to_date
                                    )) AS ums_group_ass_to_date
                                FROM
                                    APP_FIPINVRITL.tbl_fiber_inv_job_progress jp1
                                GROUP BY
                                    jp1.job_id,
                                    jp1.job_progress_flag
                                ORDER BY
                                    jp1.job_id
                            ) y1
                        WHERE
                            y1.srno = 1
                    )                                         x,
                    APP_FIPINVRITL.tbl_fiber_inv_job_progress y
                WHERE
                        x.job_id = y.job_id
                    AND (
                        CASE
                            WHEN x.ums_group_ass_to_date = TO_DATE('01-01-1801', 'DD-MM-YYYY') THEN
                                1
                            ELSE
                                CASE
                                    WHEN x.ums_group_ass_to_date = y.ums_group_ass_to_date THEN
                                            1
                                    ELSE
                                        0
                                END
                        END
                    ) = 1
                    AND x.job_progress_flag = y.job_progress_flag
            )
        ORDER BY
            job_id
    )
    SELECT DISTINCT
        md.jiostatename           AS circle,
        md.maintenancezonename
        || '/'
        || jd.maintenance_code    AS mp,
        jd.span_type              AS span_type,
        jd.clubed_span            AS span_link_id,
        jd.ne_length,
        jpd.hoto_actual_length    AS route_accepted,
        jpd.lit_actual_length     AS lit_accepted,
        jd.missing_abd_length     AS missing_asbuilt,
        hs.status,
        jd.offered_date,
        decode(
            jpd.hoto_accepted_date,
            '01-JAN-01',
            'NOT PRESENT',
            jpd.hoto_accepted_date
        )                         AS hoto_accepted_date,
        decode(
            jpd.lit_accepted_date,
            '01-JAN-01',
            'NOT PRESENT',
            jpd.lit_accepted_date
        )                         AS lit_accepted_date,
        ad.assigned_by,
        ad.assigned_to,
        jpd.job_progress_flag,
        jpd.route_accepted_by_cmm AS route_approved_by_cmm,
        jpd.lit_accepted_by_cmm   AS lit_approved_by_cmm,
        jpd.cmm_approved_date,
        jd.reofferflag,
        round(
            (sysdate - jpd.modified_date),
            0
        )                         AS "JPD.MODIFIED_DATE",
        jpd.approv_reject_remark
    FROM
        jobs_data        jd
        LEFT JOIN main_data        md ON md.maintenancezonecode = jd.maintenance_code
        LEFT JOIN jobprogress_data jpd ON jpd.job_id = jd.job_id
        LEFT JOIN assigndata       ad ON ad.job_id = jd.job_id
        LEFT JOIN hotostatus       hs ON hs.status_id = jpd.status_id
    WHERE
        jd.ne_length > 0
    ORDER BY
        span_type,
        circle,
        mp;
sql oracle view
1个回答
0
投票

也许这会有所帮助......

| I have a view where multiple JOB PROGRESS ID is attached to 1 JOB_ID. 
| So if there are 2 JOB PROGRESS ID there are 2 status_id. 
| SO I want to get the latest status id based on job porgress id desc.
WITH    --  S a m p l e    D a t a :
    jobs (JOB_ID, JOB_NAME) AS
        ( Select 1, 'Asking help from SO' From Dual Union All
          Select 2, 'Some other job' From Dual
        ),
    job_progresses (JOB_PROGRESS_ID, JOB_PROGRESS_DESC, JOB_ID) AS
        ( Select 101, 'Prepare some reduced sample data',        1 From Dual Union All
          Select 102, 'Explain logic applicable to sample data', 1 From Dual Union All
          Select 103, 'Describe your approach to the logic',     1 From Dual Union All
          Select 104, 'Prepare your attempted solution code',    1 From Dual Union All
          Select 105, 'Explain what happened',                   1 From Dual Union All
          Select 106, 'Prepare expected result',                 1 From Dual Union All
          Select 107, 'Post it all on SO and ask for help',      1 From Dual Union All
          --
          Select 201, 'First part of some other job',  2 From Dual Union All
          Select 202, 'Second part of some other job', 2 From Dual Union All
          Select 203, 'Third part of some other job',  2 From Dual 
        )
--      S Q L :
SELECT    JOB_ID, JOB_NAME, JOB_PROGRESS_ID, JOB_PROGRESS_DESC, TOTAL_PROGRESS_STEPS
FROM    ( Select        j.JOB_ID, j.JOB_NAME, p.JOB_PROGRESS_ID, p.JOB_PROGRESS_DESC, 
                Row_Number() Over(Partition By j.JOB_ID Order By p.JOB_PROGRESS_ID) "PROGRESS_STEP_NUMBER",
                Count(p.JOB_PROGRESS_ID) Over(Partition By j.JOB_ID) "TOTAL_PROGRESS_STEPS"
          From      jobs j
          Left Join job_progresses p ON(p.JOB_ID = j.JOB_ID)
          Order By    j.JOB_ID
        )
WHERE     PROGRESS_STEP_NUMBER = TOTAL_PROGRESS_STEPS
ORDER BY  JOB_ID

/*      R e s u l t :
    JOB_ID JOB_NAME            JOB_PROGRESS_ID JOB_PROGRESS_DESC                       TOTAL_PROGRESS_STEPS
---------- ------------------- --------------- --------------------------------------- --------------------
         1 Asking help from SO             107 Post it all on SO and ask for help                         7
         2 Some other job                  203 Third part of some other job                               3   */
© www.soinside.com 2019 - 2024. All rights reserved.