Sql 查询查找一系列相隔 5 分钟内发生的日期?

2023-12-12

这是 Sql Server 2008。我有一组数据,如下所示:

Table UserAchievement
   id
   userId
   achievementId
   completedDate

当用户获得奖励时,奖励和用户以及日期都会被记录下来。我想要的是一个查询,该查询可以找到同一用户在 5 分钟内获得的一组 3 个成就。关于如何实现这一目标有什么想法吗?

提前致谢-

Chu


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

  • 查找某个时间范围内的集合

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
        )

如果你想选择所有的集合N内奖励5分钟,使用这个:

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

Replace 3包含您需要的任意数量的奖励。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sql 查询查找一系列相隔 5 分钟内发生的日期? 的相关文章

随机推荐