когда я прохожу emplid, он работает, но когда я прохожу campus_id, это занимает бесконечное время - PullRequest
0 голосов
/ 10 января 2020

Когда я передаю emplid, он запускается, но когда я передаю campus_id, он занимает бесконечное время

WITH aa
AS (
    SELECT DISTINCT emplid
        ,strm
        ,catalog_nbr
        ,COUNT(ATTEND_PRESENT) OVER (
            PARTITION BY emplid
            ,strm
            ,catalog_nbr
            ) AS present_days
    FROM ps_SRM_ATT_2_VW
    WHERE ATTEND_PRESENT = 'Y'
    )
    ,bb
AS (
    SELECT DISTINCT emplid
        ,strm
        ,catalog_nbr
        ,COUNT(ATTEND_PRESENT) OVER (
            PARTITION BY emplid
            ,strm
            ,catalog_nbr
            ) AS total_days
    FROM ps_SRM_ATT_2_VW
    )
    ,cc
AS (
    SELECT DISTINCT emplid
        ,strm
        ,catalog_nbr
        ,nvl(sum(days) OVER (
                PARTITION BY emplid
                ,strm
                ,catalog_nbr
                ), 0) AS relax_days
    FROM PS_SRM_RELAX_TBL
    )
    ,kk
AS (
    SELECT DISTINCT emplid
        ,strm
        ,days
        ,CATALOG_NBR
    FROM ps_srm_relax_tbl
    )
    ,hh
AS (
    SELECT DISTINCT a.emplid
        ,b.strm
        ,a.campus_id
        ,b.CATALOG_NBR
    FROM ps_personal_data a
        ,ps_SRM_ATT_2_VW b
    WHERE a.emplid = b.emplid
    ORDER BY a.emplid
    )
SELECT DISTINCT AA.emplid
    ,gg.name_display
    ,GG.campus_id
    ,nvl(kk.days, 0) AS relax_lectures
    ,(
        CASE 
            WHEN tt.ssr_component = 'LEC'
                OR tt.ssr_component = 'TUT'
                THEN 'Theory'
            ELSE 'Practical'
            END
        ) AS component1
    ,nvl(round((
                (
                    nvl(aa.present_days, 0) + nvl((
                            SELECT relax_days
                            FROM cc
                            WHERE emplid = aa.emplid
                                AND strm = aa.strm
                                AND catalog_nbr = aa.catalog_nbr
                            ), 0)
                    ) / nvl(bb.total_days, 1)
                ) * 100, 2), 0) AS total
    ,dd.acad_career
    ,dd.acad_prog
    ,ee.acad_plan
    ,aa.strm
    ,ff.ACAD_LEVEL_BOT
    ,bb.total_days AS total_lecture
    ,aa.present_days AS Lecture_attend
    ,pp.subject || ' ' || pp.catalog_nbr AS SubjectCatalog
    ,tt.COURSE_TITLE_LONG
FROM aa
LEFT JOIN cc ON aa.emplid = cc.emplid
    AND aa.strm = cc.strm
    AND aa.catalog_nbr = cc.catalog_nbr

Вот ps_personal_data gg и подсказка id кампуса, вызывающая проблему, связанную с этим

LEFT JOIN ps_personal_data gg ON AA.EMPLID = GG.EMPLID
LEFT JOIN hh ON aa.emplid = hh.emplid
    AND aa.strm = hh.strm
    AND aa.catalog_nbr = hh.catalog_nbr
LEFT JOIN kk ON cc.emplid = kk.emplid
    AND cc.strm = kk.strm
    AND cc.catalog_nbr = kk.catalog_nbr
LEFT JOIN ps_crse_offer pp ON aa.CATALOG_NBR = pp.catalog_nbr
LEFT JOIN ps_crse_catalog tt ON pp.crse_id = tt.crse_id
    ,bb
    ,PS_ACAD_PROG dd
    ,PS_ACAD_PLAN ee
    ,PS_STDNT_CAR_TERM ff
WHERE dd.effdt = (
        SELECT max(effdt)
        FROM ps_acad_prog
        WHERE emplid = dd.emplid
        )
    AND dd.effseq = (
        SELECT max(effseq)
        FROM ps_acad_prog
        WHERE emplid = dd.emplid
            AND effdt = dd.effdt
        )
    AND ee.effdt = (
        SELECT max(effdt)
        FROM ps_acad_prog
        WHERE emplid = ee.emplid
        )
    AND ee.effseq = (
        SELECT max(effseq)
        FROM ps_acad_prog
        WHERE emplid = ee.emplid
            AND effdt = ee.effdt
        )
    AND TT.EFFDT = (
        SELECT max(effdt)
        FROM ps_CRSE_CATALOG
        WHERE CRSE_ID = PP.CRSE_ID
        )
    AND dd.emplid = aa.emplid
    AND aa.emplid = hh.emplid
    AND ee.emplid = aa.emplid
    AND aa.emplid = ff.emplid
    AND aa.emplid = ee.emplid
    AND aa.emplid = bb.emplid
    AND
    --GG.CAMPUS_ID=HH.CAMPUS_ID AND 
    aa.catalog_nbr = hh.catalog_nbr
    AND aa.strm = bb.strm
    AND tt.eff_status = 'A'
    AND aa.catalog_nbr = bb.catalog_nbr
    AND aa.strm = ff.strm
    AND tt.effdt = (
        SELECT max(effdt)
        FROM ps_crse_catalog
        WHERE crse_id = pp.crse_id
        )
    AND AA.STRM = '1901'
    AND
    --AA.EMPLID='00000009724'; 

Если я скрою gg.campus_id и передам aa.emplid, он будет работать гладко в течение 3-4 секунд.

Вот подсказка, когда я даю идентификатор кампуса, это занимает бесконечное время

    GG.CAMPUS_id = : 1;
...