報酬システムでトップ 20 の獲得者のリストを作成しようとしています。
次のステートメントは、それを示すのに完全に機能します。
SELECT
S.User_ID As UserID,
CONCAT(S.User_Forename, " ", S.User_Surname) AS StudentName,
T.TotalPoints
FROM
student S
INNER JOIN
( SELECT
Datetime, Recipient_ID, SUM(Points) AS TotalPoints
FROM
transactions
GROUP BY
Recipient_ID ) T
ON
S.User_ID = T.Recipient_ID
ORDER BY TotalPoints DESC
LIMIT 20
しかし、考えてみると、来年は日付範囲を含める必要があります (つまり、その学年の成績上位者のみを表示します)。
LESS THAN DATETIME
テスト目的で、選択を含む次のステートメントを修正しようとしました。
SELECT
S.User_ID As UserID,
CONCAT(S.User_Forename, " ", S.User_Surname) AS StudentName,
T.TotalPoints
FROM
student S
INNER JOIN
( SELECT
Datetime, Recipient_ID, SUM(Points) AS TotalPoints
FROM
transactions
GROUP BY
Recipient_ID ) T
ON
S.User_ID = T.Recipient_ID
WHERE t.Datetime < 2012-03-20
ORDER BY TotalPoints DESC
LIMIT 20
私もこれを試しました:
SELECT
S.User_ID As UserID,
CONCAT(S.User_Forename, " ", S.User_Surname) AS StudentName,
T.TotalPoints
FROM
student S
INNER JOIN
( SELECT
Datetime, Recipient_ID, SUM(Points) AS TotalPoints
FROM
transactions
WHERE Datetime < 2012-03-20
GROUP BY
Recipient_ID ) T
ON
S.User_ID = T.Recipient_ID
ORDER BY TotalPoints DESC
LIMIT 20
ただし、どちらも空の結果セットを表示します。
単純な を実行するSELECT * FROM transactions WHERE Datetime < 2012-03-20
と、25,000 件を超える結果が返されます。
どこが間違っていますか?