Эта статья в моем блоге объясняет решение более подробно:
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
Замените 3
любым количеством наград в наборе, который вам нужен.