У меня есть следующее:
UserID SomeValue DateUpdated
------------------------------------
1 263 2019-09-07
2 abc 2019-09-10
1 123 2019-09-10
2 234 2019-09-11
1 573 2019-09-20
Мне нужен запрос, который вернет отдельный идентификатор пользователя, самое последнее значение DateUpdated и соответствующее значение SomeValue для самой последней записи.
Я пробовал внешнее объединение для подзапроса той же таблицы.Не дал ожидаемых результатов.
SELECT B.UserID, B.SomeValue, B.DateUpdated
FROM thetable B
LEFT OUTER JOIN
(SELECT UserID, MAX(DateUpdated) AS DateUpdated
FROM thetable GROUP BY UserID) x
ON x.UserID = B.UserID AND x.DateUpdated = B.DateUpdated
Но это возвращает намного больше, чем ожидалось.
Из приведенного выше примера данных я бы ожидал получить:
UserID SomeValue DateUpdated
------------------------------------
2 234 2019-09-11
1 573 2019-09-20
В моей производственной таблице:У меня есть 3670108 записей.Внешнее соединение вернуло 3 669 774, но в таблице только 1 182 525 различных идентификаторов пользователей.Поэтому я ожидаю, что результаты будут 1 182 525 строк.
Любая помощь очень ценится.