-- ---------------------------------------------------------------------------------
-- create dummy NEW table
-- ---------------------------------------------------------------------------------
WITH
table_new_data AS (
SELECT
'2022-01' AS date,
't1' AS type,
0 AS DATA
UNION ALL
SELECT
'2022-03',
't2' ,
1
UNION ALL
SELECT
'2021-08' ,
't1' ,
1 ),
-- ---------------------------------------------------------------------------------
-- create dummy OLD table
-- ---------------------------------------------------------------------------------
table_old_data AS (
SELECT
'2021-10' AS date,
't1' AS type,
2 AS DATA
UNION ALL
SELECT
'2022-04',
't2',
3
UNION ALL
SELECT
'2021-07',
't1',
4
UNION ALL
SELECT
'2021-06',
't1',
5),
-- ---------------------------------------------------------------------------------
-- create joined tables based on dates from old table being LOWER (may need <=??)
-- create order = ROW_NUMBER() function to see which date is closest from old table
-- make sure to test on edge cases where dates are the same or equal to
-- ---------------------------------------------------------------------------------
ordered AS (
SELECT
nd.date AS new_date,
nd.type,
nd.DATA AS new_data,
od.date AS old_date,
od.DATA AS old_data,
ROW_NUMBER() OVER(PARTITION BY nd.type, nd.date ORDER BY nd.date ) AS rn
FROM
table_new_data nd
LEFT JOIN
table_old_data od
ON
nd.type = od.type
AND od.date < nd.date )
-- ---------------------------------------------------------------------------------
-- final table to reproduce desired output in question
-- ---------------------------------------------------------------------------------
SELECT
* EXCEPT(rn)
FROM
ordered
WHERE
rn = 1