Я пытаюсь получить последнее голосование (основанное на dateCreated) для каждого пользователя. Моя попытка ниже работает, но я чувствую, что несколько вложенных операторов SELECT невероятно неэффективны. У кого-то есть лучшее решение? Я новичок в SQL, поэтому я был бы признателен за прохождение вашего решения, а также за код.
SELECT * FROM
(
SELECT DISTINCT t.userId
FROM
(
SELECT userId,vote,dateCreated
FROM pgVote
WHERE categoryId = 528
ORDER BY dateCreated DESC
)
AS t
)
AS u
SELECT aa.*
FROM pgVote aa
INNER JOIN (
SELECT userId, MAX(dateCreated) as latestDate
FROM pgVote
WHERE categoryId = 528
GROUP BY userId
) bb ON aa.userId = bb.userId AND aa.dateCreated = bb.latestDate
Таблица bb - это всего лишь список идентификаторов пользователя с последней датой. Как только вы присоединитесь к aa, который является полной таблицей, он будет фильтровать последнее голосование за вас.