Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SELECT
- dt as date_A,
- -- find the previous date_B // LAG
- MAX(CASE WHEN x = 2 THEN dt end) OVER (ORDER BY dt, x ROWS UNBOUNDED PRECEDING ) AS prev_date,
- -- find the next date_B // LEAD
- MIN(CASE WHEN x = 2 THEN dt end) OVER (ORDER BY dt, x ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) AS next_date,
- -- now find the nearest date
- CASE WHEN prev_date IS NULL THEN next_date
- WHEN next_date IS NULL THEN prev_date
- WHEN dt - prev_date < next_date - dt THEN prev_date
- ELSE next_date
- END AS date_B
- FROM
- ( -- get all dates, maybe UNION INSTEAD OF UNION ALL
- SELECT date_A as dt, 1 AS x
- FROM table_A
- UNION ALL
- SELECT date_B, 2
- FROM table_B
- ) AS dt
- QUALIFY x = 1 -- only rows from table_A
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement