Как выбрать фотографии с самым высоким рейтингом за последние несколько дней? - PullRequest
0 голосов
/ 22 января 2012

Вот мой контекст данных:

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 (Значение) и выбрать первую из каждой группы? Большое спасибо за вашу помощь.

1 Ответ

2 голосов
/ 22 января 2012
SELECT Date, TotalRating, Photos.*
FROM Photos
INNER JOIN 
(SELECT ROW_NUMBER() OVER (ORDER BY Date DESC) AS RowNumber, 
        PhotoID, Date, TotalRating
 FROM (SELECT ROW_NUMBER() OVER (PARTITION BY Date, ORDER BY TotalRating DESC) AS inRowNumber,
              PhotoID, Date, TotalRating
        FROM (SELECT PhotoID, Date, SUM(Value) AS TotalRating
              FROM Photos
              GROUP BY PhotoID, Date
              HAVING SUM(Value) > 0 ) t)
 WHERE inRowNumber = 1) t ON Photos.Id = t.PhotoID
 WHERE RowNumber <= @days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...