サイトの各ユーザーのスコアが (Stackoverflow のように) サイトを使用するにつれて増加し、score
各ユーザーのユーザー プロファイル テーブルにフィールドが格納されているとします。
歴代上位 10 人のユーザーを取得するのは簡単score
です。列で並べ替えるだけです。
「今日のトップ 10」、「今週のトップ 10」、「全期間のトップ 10」が欲しいです。
これを実装する最良の方法は何ですか? すべてのスコア変更をタイムスタンプ付きで保存する必要がありますか?
サイトの各ユーザーのスコアが (Stackoverflow のように) サイトを使用するにつれて増加し、score
各ユーザーのユーザー プロファイル テーブルにフィールドが格納されているとします。
歴代上位 10 人のユーザーを取得するのは簡単score
です。列で並べ替えるだけです。
「今日のトップ 10」、「今週のトップ 10」、「全期間のトップ 10」が欲しいです。
これを実装する最良の方法は何ですか? すべてのスコア変更をタイムスタンプ付きで保存する必要がありますか?
増分を格納し、タイムスタンプを使用するテーブルが必要です。IE
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