WITH all_records AS (
SELECT
email,
name,
phone,
'dataset_1' AS source,
updated_at
FROM company_data."100"
UNION ALL
SELECT
email,
name,
phone,
'dataset_2' AS source,
updated_at
FROM company_data."200"
),
ranked AS (
SELECT
email,
name,
phone,
source,
updated_at,
ROW_NUMBER() OVER (
PARTITION BY email
ORDER BY
CASE WHEN name IS NOT NULL THEN 1 ELSE 2 END,
CASE WHEN phone IS NOT NULL THEN 1 ELSE 2 END,
updated_at DESC
) AS rn
FROM all_records
)
SELECT email, name, phone, source
FROM ranked
WHERE rn = 1