Skip to content

Instantly share code, notes, and snippets.

@dialogbox
Last active September 6, 2018 10:28
Show Gist options
  • Save dialogbox/454380d6a68344556350bb8dbf1d64e5 to your computer and use it in GitHub Desktop.
Save dialogbox/454380d6a68344556350bb8dbf1d64e5 to your computer and use it in GitHub Desktop.
Example: Convert an Oracle FIRST/LAST query to EDB PAS/PostgreSQL
SELECT MAX(FCT_CODE) KEEP(DENSE_RANK FIRST ORDER BY FNL_UPD_DT desc, PRODC_MAGT_NO desc) AS FCT_CODE,
MAX(PLANT_CODE) KEEP(DENSE_RANK FIRST ORDER BY FNL_UPD_DT desc, PRODC_MAGT_NO desc) AS PLANT_CODE,
MAX(PRODC_MAGT_NO) KEEP(DENSE_RANK FIRST ORDER BY FNL_UPD_DT desc, PRODC_MAGT_NO desc) AS PRODC_MAGT_NO
FROM TBM_PM_PRODC_PRGS A
WHERE 1 = 1
AND (A.FCT_CODE, A.PLANT_CODE) IN (('C100A', 'P105'))
AND (A.PRODC_MAGT_NO = '0F5PH3AH700007H' OR A.PRODC_MAGT_NO LIKE '0F5PH3AH700007H'||'_')
AND ROWNUM = 1
-- ==>
SELECT MAX(FCT_CODE) AS FCT_CODE, MAX(PLANT_CODE) AS PLANT_CODE, MAX(PRODC_MAGT_NO) AS PRODC_MAGT_NO
FROM (
SELECT FIRST_VALUE(FNL_UPD_DT) OVER W AS M_FNL_UPD_DT, FIRST_VALUE(PRODC_MAGT_NO) OVER W AS M_PRODC_MAGT_NO
, FNL_UPD_DT, PRODC_MAGT_NO, FCT_CODE, PLANT_CODE
FROM TBM_PM_PRODC_PRGS A
WHERE 1 = 1
AND (A.FCT_CODE, A.PLANT_CODE) IN (('C100A', 'P112'))
AND (A.PRODC_MAGT_NO = 'CARP112F4210719' OR A.PRODC_MAGT_NO LIKE 'CARP112F4210719'||'_')
WINDOW W AS (ORDER BY FNL_UPD_DT desc, PRODC_MAGT_NO desc)
)
WHERE ((M_FNL_UPD_DT = FNL_UPD_DT) OR (M_FNL_UPD_DT IS NULL AND FNL_UPD_DT IS NULL))
AND ((M_PRODC_MAGT_NO = PRODC_MAGT_NO) OR (M_PRODC_MAGT_NO IS NULL AND PRODC_MAGT_NO IS NULL))
LIMIT 1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment