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).