假设我网站上的每个用户的分数随着他们使用该网站(如 Stackoverflow)而增加,并且我score
在每个用户的用户配置文件表中存储了一个字段。
获得有史以来排名前 10 的用户很容易,只需按score
列排序即可。
我想要“今天前 10 名”、“本周前 10 名”、“有史以来前 10 名”。
实现这一点的最佳方法是什么?我需要用时间戳存储每一个分数变化吗?
假设我网站上的每个用户的分数随着他们使用该网站(如 Stackoverflow)而增加,并且我score
在每个用户的用户配置文件表中存储了一个字段。
获得有史以来排名前 10 的用户很容易,只需按score
列排序即可。
我想要“今天前 10 名”、“本周前 10 名”、“有史以来前 10 名”。
实现这一点的最佳方法是什么?我需要用时间戳存储每一个分数变化吗?
You would have to have a table that stored the increments and use a timestamp. I.E.
CREATE TABLE ScoreIncreases (
PrimaryKey UNIQUEIDENTIFIER,
UserId UNIQUEIDENTIFIER,
ScoreIncrease INT,
CreatedDate DATETIME)
Your query would then be something like
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