2012-07-09 74 views
0

我試圖在我的獎勵系統中列出前20名收入者。將日期納入此GROUP BY和INNER JOIN select語句

下面的語句完美的作品表明:

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,返回25K以上的結果。

我哪裏錯了?

+0

你嘗試在你的日期值一個單引號? '2012-03-20' – Taryn 2012-07-09 15:43:19

+0

我很好奇。也許我錯過了一些東西,但是日期時間不在聚合或組合語句中。它在T子查詢中會發生什麼? – 2012-07-09 15:44:45

+0

@dunc嘗試bluefeet的建議。它應該工作。 – 2012-07-09 15:47:03

回答

1

看來,你缺少的單引號'在你的日期值:

WHERE t.Datetime < '2012-03-20'