1

假设我网站上的每个用户的分数随着他们使用该网站(如 Stackoverflow)而增加,并且我score在每个用户的用户配置文件表中存储了一个字段。

获得有史以来排名前 10 的用户很容易,只需按score列排序即可。

我想要“今天前 10 名”、“本周前 10 名”、“有史以来前 10 名”。

实现这一点的最佳方法是什么?我需要用时间戳存储每一个分数变化吗?

4

1 回答 1

4

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
于 2013-01-30T08:47:38.893 回答