0

報酬システムでトップ 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 件を超える結果が返されます。

どこが間違っていますか?

4

1 に答える 1

1

'日付の値を一重引用符で囲んでいないようです:

WHERE t.Datetime < '2012-03-20'
于 2012-07-09T15:50:32.303 に答える