Guest User

Untitled

a guest
Jun 23rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.02 KB | None | 0 0
  1. /*
  2. Turn this:
  3.  
  4. 1   aaaa    1/15/2012
  5. 1   aaaa    1/16/2012
  6. 1   aaaa    1/17/2012
  7. 1   aaaa    1/20/2012
  8. 1   aaaa    1/21/2012
  9.  
  10. Into this:
  11.  
  12. 1   aaaa    1/15/2012   1/17/2012
  13. 1   aaaa    1/20/2012   1/21/2012
  14. */
  15.  
  16.  
  17. WITH base_table AS (
  18. SELECT /*+ materialize */
  19. detail AS nk, run_date,
  20. CASE WHEN LAG(run_date, 1, TO_DATE('1900-01-01', 'yyyy-mm-dd')) over (ORDER BY run_date ASC) = run_date - 1 THEN 'N' ELSE 'Y' END AS begin_date_flag,
  21. CASE WHEN LEAD(run_date, 1, TO_DATE('9999-12-31', 'yyyy-mm-dd')) over (ORDER BY run_date ASC) = run_date + 1 THEN 'N' ELSE 'Y' END AS end_date_flag
  22. FROM jxw_fact_stage
  23. ),
  24. begin_date AS (
  25.   SELECT ROW_NUMBER() over (ORDER BY run_date) rn, nk, run_date AS begin_date FROM base_table WHERE begin_date_flag = 'Y'
  26. ),
  27. end_date AS (
  28.   SELECT ROW_NUMBER() over (ORDER BY run_date) rn, nk, run_date AS end_date FROM base_table WHERE end_date_flag = 'Y'
  29. )
  30. SELECT b.nk, b.begin_date, e.end_date
  31. FROM begin_date b
  32. inner join end_date e
  33. ON b.nk = e.nk
  34. AND b.rn = e.rn
  35.  
  36. /*
  37. aaaa    1/15/2012   1/17/2012
  38. aaaa    1/20/2012   1/21/2012
  39. */
Add Comment
Please, Sign In to add comment