SQL查询以查找彼此发生在5分钟内的一系列日期?

bug*_*ixr 1 sql-server

这是Sql Server2008。我有一组看起来像这样的数据:

Table UserAchievement
   id
   userId
   achievementId
   completedDate
Run Code Online (Sandbox Code Playgroud)

当用户获得奖励时,奖励和用户将与日期一起记录。我想要的是一个查询,该查询查找同一用户彼此在5分钟之内获得的3项成就。关于如何实现这一目标的任何想法?

提前致谢-

Qua*_*noi 5

我博客中的这篇文章更详细地介绍了该解决方案:


SELECT  *
FROM    UserArchievement uf
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    UserArchievement un
        WHERE   un.userId = uf.userID
                AND un.completedDate BETWEEN DATEADD(minute, -5, uf.completedDate) AND DATEADD(minute, 5, uf.completedDate)
                AND un.id <> uf.id
        )
Run Code Online (Sandbox Code Playgroud)

如果要N5几分钟内选择所有奖项,请使用以下方法:

SELECT  DISTINCT ue.id
FROM    UserArchievement uf
JOIN    UserArchievement ue
ON      ue.userID = uf.userID
        AND ue.completedDate BETWEEN uf.completedDate AND DATEADD(minute, 5, uf.completedDate)
WHERE   (
        SELECT  COUNT(*)
        FROM    UserArchievement un
        WHERE   un.userId = uf.userID
                AND un.completedDate BETWEEN uf.completedDate AND DATEADD(minute, 5, uf.completedDate)
        ) = 3
Run Code Online (Sandbox Code Playgroud)

替换3为您需要的任何数量的奖励。