假设我网站上的每个用户的分数随着他们使用该网站(如 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