Я выполняю упражнение SQL: во всех случаях, когда один и тот же рецензент дважды оценивал один и тот же фильм и во второй раз оценивал его, возвращает имя рецензента и название фильма.
Мое решение здесь, и оно работает, но я думаю, что это должен быть более разумный способ получить это решение. После нескольких проверок я вставил условие «LIMIT 1 OFFSET 1» в конце кода, потому что с первого взгляда увидел, что мне нужен именно этот результат. Моя проблема в том, что я думаю, что мой подход не автоматизирует мой запрос. Любое предложение улучшить мой код?
SELECT name, title
FROM Rating
JOIN Reviewer
ON Reviewer.rID = Rating.rID
JOIN Movie
ON Movie.mID = Rating.mID
GROUP BY name
ORDER BY ratingDate DESC
LIMIT 1 OFFSET 1;
МОЙ новый запрос:
SELECT
name, title
FROM
Rating
JOIN Reviewer ON Reviewer.rID = Rating.rID
JOIN Movie ON Movie.mID = Rating.mID
WHERE
NOT EXISTS (SELECT *
FROM Rating later_higher
WHERE later_higher.rid = Rating.rid
AND later_higher.mid = Rating.mid
AND later_higher.stars > Rating.stars
AND later_higher.ratingDate > Rating.ratingDate
)
AND EXISTS (SELECT *
FROM Rating earlier_lower
WHERE earlier_lower.rid = Rating.rid
AND earlier_lower.mid = Rating.mid
AND earlier_lower.stars < Rating.stars
AND earlier_lower.ratingDate < Rating.ratingDate
)