Получение самой последней записи для пользователя является распространенной проблемой, которая часто помечается greatest-n-per-group
в переполнении стека.Я предлагаю создать VIEW для этого, хотя это не является строго обязательным.
CREATE VIEW LatestKeyValue AS
SELECT k1.*
FROM KeyValue AS k1
LEFT OUTER JOIN KeyValue AS k2
ON (k1.UUID_User, k1.Variable) = (k2.UUID_User, k2.Variable)
AND k1.DateSet < k2.DateSet
WHERE k2.DateSet IS NULL
Затем вы можете повернуть его для каждой необходимой вам переменной несколькими способами, такими как:
SELECT UUID_User,
MAX(CASE Variable WHEN 'FirstName' THEN Value END) AS FirstName,
MAX(CASE Variable WHEN 'LastName' THEN Value END) AS LastName
FROM LatestKeyValue
GROUP BY UUID_User