假设我网站上的每个用户的分数在使用网站时都会增加(例如Stackoverflow),并且我在每个用户的用户个人资料表中都有一个字段score
。
获取前10位用户非常简单,只需按score
列排序即可。
我想拥有“今天的前10名”,“本周排名前10”,“有史以来的前10名”。
实施此方法的最佳方法是什么?我是否需要使用时间戳存储每个分数变化?
答案 0 :(得分:4)
您必须有一个存储增量的表并使用时间戳。即。
CREATE TABLE ScoreIncreases (
PrimaryKey UNIQUEIDENTIFIER,
UserId UNIQUEIDENTIFIER,
ScoreIncrease INT,
CreatedDate DATETIME)
您的查询将类似
SELECT TOP 1 u.PrimaryKey, SUM(ScoreIncrease)
FROM Users u
INNER JOIN ScoreIncreases si ON si.Userid=u.PrimaryKey
WHERE DATEDIFF(day,si.CreatedDate,GETDATE()) = 0
GROUP BY u.PrimaryKey
ORDER BY SUM(ScoreIncrease) DESC