It is fairly normalised - if you consider the timestamp and ID to be a composite primary key.
For future reference for anyone that has this problem (or if anyone can suggest a more efficient way for me to do this) the solution I have in SQL Server looks like this:
SELECT ID, col1, col2, coln...
FROM dbo.Users
WHERE ((CAST(ID AS char(36)) + ' & ' + CONVERT(varchar(20), CONVERT(float, CAST(Created AS datetime)))) IN
(SELECT CAST(ID AS char(36)) + ' & ' + CONVERT(varchar(20), CONVERT(float, CAST(MAX(Created) AS datetime))) AS MYID
FROM dbo.Users AS UsersSQ
GROUP BY ID))
Lovely!
For some reason, a conversion of Created to datetime gives differences of milliseconds, so when that is compared as a string there really is no difference! Also, it can't be converted directly into a float, so I have to cast/convert it twice!