Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.72 KB | None | 0 0
  1. SELECT
  2. dt as date_A,
  3. -- find the previous date_B // LAG
  4. MAX(CASE WHEN x = 2 THEN dt end) OVER (ORDER BY dt, x ROWS UNBOUNDED PRECEDING ) AS prev_date,
  5. -- find the next date_B // LEAD
  6. MIN(CASE WHEN x = 2 THEN dt end) OVER (ORDER BY dt, x ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) AS next_date,
  7. -- now find the nearest date
  8. CASE WHEN prev_date IS NULL THEN next_date
  9. WHEN next_date IS NULL THEN prev_date
  10. WHEN dt - prev_date < next_date - dt THEN prev_date
  11. ELSE next_date
  12. END AS date_B
  13. FROM
  14. ( -- get all dates, maybe UNION INSTEAD OF UNION ALL
  15. SELECT date_A as dt, 1 AS x
  16. FROM table_A
  17. UNION ALL
  18. SELECT date_B, 2
  19. FROM table_B
  20. ) AS dt
  21. QUALIFY x = 1 -- only rows from table_A
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement