J'ai une seule table dont j'ai besoin pour retirer les 5 enregistrements les plus récents en fonction d'un ID utilisateur et de la saisie de l'ID document (pas de doublons). Fondamentalement, je suis le suivi des pages visitées et j'essaie de retirer les 3 plus récentes par utilisateur.
Exemples de données:
╔══════════════════════════════════════════════╗
║UserID DocumentID CreatedDate ║
╠══════════════════════════════════════════════╣
║ 71 22 2013-09-09 12:19:37.930 ║
║ 71 25 2013-09-09 12:20:37.930 ║
║ 72 1 2012-11-09 12:19:37.930 ║
║ 99 76 2012-10-10 12:19:37.930 ║
║ 71 22 2013-09-09 12:19:37.930 ║
╚══════════════════════════════════════════════╝
Résultats de requête souhaités si UserID = 71:
╔══════════════════════════════════════════════╗
║UserID DocumentID CreatedDate ║
╠══════════════════════════════════════════════╣
║ 71 25 2013-09-09 12:20:37.930 ║
║ 71 22 2013-09-09 12:19:37.930 ║
╚══════════════════════════════════════════════╝
SELECT TOP 3 UserId, DocumentId, MAX(CreatedDate)
FROM MyTable
WHERE UserId = 71
GROUP BY UserId, DocumentId
ORDER BY MAX(CreatedDate) DESC
Vous pouvez essayer ceci:
SELECT DISTINCT USERID,
DOCUMENTID,
MAX(CREATEDDATE)
OVER (
PARTITION BY USERID, DOCUMENTID) CREATEDDATE
FROM MYTABLE
WHERE USERID = 71
Jetez un œil à l'exemple de travail sur SQL Fiddle .
Bonne chance!
Vous pouvez essayer d'utiliser un CTE et ROW_NUMBER .
Quelque chose comme
;WITH Vals AS (
SELECT UserID,
DocumentID,
ROW_NUMBER() OVER(PARTITION BY UserID, DocumnentID ORDER BY CreatedDate DESC) RowID
FROM MyTable
)
SELECT TOP 3 *
FROM Vals
WHERE UserID = 71
AND RowID = 1