这是Sql Server2008。我有一组看起来像这样的数据:
Table UserAchievement
id
userId
achievementId
completedDate
Run Code Online (Sandbox Code Playgroud)
当用户获得奖励时,奖励和用户将与日期一起记录。我想要的是一个查询,该查询查找同一用户彼此在5分钟之内获得的3项成就。关于如何实现这一目标的任何想法?
提前致谢-
楚
我博客中的这篇文章更详细地介绍了该解决方案:
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)
如果要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
Run Code Online (Sandbox Code Playgroud)
替换3为您需要的任何数量的奖励。
| 归档时间: |
|
| 查看次数: |
2088 次 |
| 最近记录: |