SQL Refactor

a UCPath example

Step-by-step guide

 

  1. Employees job related information is stored in PS_JOB table in ODS

  2. You should be using MAX effective date (EFFDT) and effective sequence(EFFSEQ)

SELECT J.* FROM HCM_ODS.PS_JOB J where
     
J.EFFDT = (SELECT MAX(J1.EFFDT) FROM HCM_ODS.PS_JOB J1
               
WHERE J.EMPLID = J1.EMPLID
               
AND J.EMPL_RCD = J1.EMPL_RCD
               
AND J1.EFFDT <= GETDATE())
     
AND J.EFFSEQ = (SELECT MAX(J2.EFFSEQ) FROM HCM_ODS.PS_JOB J2
                  
WHERE J.EMPLID = J2.EMPLID
                   
AND J.EMPL_RCD = J2.EMPL_RCD
                  
AND J.EFFDT = J2.EFFDT)

Original Query

SELECT j.* 
FROM   hcm_ods.ps_job J 
WHERE  j.effdt = 
       ( 
              SELECT Max(j1.effdt) 
              FROM   hcm_ods.ps_job J1 
              WHERE  j.emplid = j1.emplid 
              AND    j.empl_rcd = j1.empl_rcd 
              AND    j1.effdt <= Getdate()) 
AND    j.effseq = 
       ( 
              SELECT Max(j2.effseq) 
              FROM   hcm_ods.ps_job J2 
              WHERE  j.emplid = j2.emplid 
              AND    j.empl_rcd = j2.empl_rcd 
              AND    j.effdt = j2.effdt) 

Reformatted

Demo time

SELECT j.emplid, j.empl_rcd, j.effdt, j.effseq
FROM   hcm_ods.ps_job J 
WHERE  j.effdt = 
       ( 
	    SELECT Max(j1.effdt) 
	    FROM   hcm_ods.ps_job J1 
	    WHERE  j.emplid = j1.emplid 
		    AND    j.empl_rcd = j1.empl_rcd 
		    AND    j1.effdt <= Getdate()
        ) 

AND    j.effseq = 
       ( 
            SELECT Max(j2.effseq) 
            FROM   hcm_ods.ps_job J2 
            WHERE  j.emplid = j2.emplid 
                    AND    j.empl_rcd = j2.empl_rcd 
                    AND    j.effdt = j2.effdt
	)	
;with
rankedJobs as (
    select					
        emplid, empl_rcd, effdt, effseq

	, rank = row_number() over (partition by emplid, empl_rcd order by
                                                    effdt desc, effseq desc)
			
    from	hcm_ods.PS_JOB
    where	effdt <= getdate()
)
select		emplid, empl_rcd, effdt, effseq
from		rankedJobs
where		rank = 1

YMMV

SQL Refactor

By Kevin Wu

SQL Refactor

a SQL refactor exercise using UCPath latest and greatest job record

  • 245