Уплотнить несколько вложенных операторов выбора

0

Я пытаюсь получить последнее голосование (основанное на 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

1 ответ

0
Лучший ответ
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, который является полной таблицей, он будет фильтровать последнее голосование за вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню