Вот мой контекст данных:
Photos (ID, Title)
Users (ID, FullName)
Ratings (PhotoID, UserID, Value, Date)
Бизнес-правила:
- пользователи могут оценивать фотографии от 1 до 5
- данный пользователь может оценить данную фотографию только один раз
Я хочу выбрать фотографии с самым высоким рейтингом по дням за последние, скажем, 3 дня. Итак, какое фото получило лучший рейтинг сегодня, вчера и позавчера? Я хотел бы сделать количество дней переменным, если это возможно. Я должен отображать только последние N дней, которые они оценили, исключая пустые дни.
Я хотел бы получить фотографии в одном запросе / результате, потому что я хочу связать их с ListView для отображения их в веб-форме.
Я начал так:
DECLARE @days INT = 3
SELECT TOP (@days) ... FROM Ratings
INNER JOIN Photos ON Photos.ID = Ratings.PhotoID
GROUP BY DATEDIFF(day, [Date], CURRENT_TIMESTAMP)
ORDER BY DATEDIFF(day, [Date], CURRENT_TIMESTAMP) DESC
Как я могу сгруппировать свои группы по PhotoID, упорядочить их по SUM (Значение) и выбрать первую из каждой группы? Большое спасибо за вашу помощь.