Combine rows to remove nulls while using latest value based on time
SELECT id
     , SUBSTRING(MAX(time || name) FROM 11) "name"
     , SUBSTRING(MAX(time || title) FROM 11) title
     , MAX(time) "time"
FROM test_table
GROUP BY id


The FROM 11 part extracts the data (name or title) from the concatenated aggregate values. First 10 characters is the date (time column).