2017-02-22 386 views
1

我試圖從每個用戶獲取最後的登錄時間,但是當我在select語句中使用MAX時,SQL查詢不起作用,它會引發關於Group By的錯誤,如果if我不使用MAX查詢返回正確的結果。這裏是日期的示例:用SQL查詢獲取每個用戶的最後時間

用戶表

Username  Date 
--------  ------ 
user1   1/22/2017 
user2   1/22/2017 
user1   1/23/2017 
user3   1/20/2017 
user2   1/19/2017 
user1   1/10/2017 
user3   1/21/2017 

的UserInfo

FullName   Dept Username 
    --------   ---- -------- 
    John Doe   IT  user1 
    Jane Smith  HR  user2 
    John Smith  IT  user3 

代碼

SELECT UserTable.UserName, Usertable.Max(EndTime) as 'Date', UserInfo.Fullname 
    FROM UserTable 
    Left JOIN UserInfo 
    On UserTable.UserName = UserInfo.Fullname 

所需的結果

FullName   Username   Date 
    --------   --------   ---- 
    John Doe   user1   1/23/2017 
    Jane Smith  user2   1/22/2017 
    John Smith  user3   1/21/2017 
+1

你應該標記與正在使用的數據庫的問題(雖然在這種情況下,並不真正相關,那就是在這個網站一個很好的做法)。 –

回答

1

你的表的別名是放錯了地方:

SELECT UserTable.UserName, MAX(Usertable.EndTime) as "Date", UserInfo.Fullname 
FROM UserTable LEFT JOIN 
    UserInfo 
    ON UserTable.UserName = UserInfo.Fullname 
GROUP BY UserTable.UserName; 

別名資格列名,指定什麼表它從何而來。該表與MAX()函數無關。我也強烈勸阻使用單引號列別名。列名與字符串常量很容易混淆。

我也建議你學會使用縮寫表的別名:

SELECT ut.UserName, MAX(ut.EndTime) as "Date", ui.Fullname 
FROM UserTable ut LEFT JOIN 
    UserInfo ui 
    ON ut.UserName = ui.Fullname 
GROUP BY ut.UserName; 

這使查詢更容易編寫和閱讀。

+0

如果我使用MAX(ut.Endtime),它會拋出一個錯誤'Column'ut.UserName'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 – texnoob

-1

這個怎麼樣

SELECT UserTable.UserName, Usertable.Max(EndTime) as 'Date', UserInfo.Fullname 
     FROM UserTable 
     Left JOIN UserInfo 
     On UserTable.UserName = UserInfo.Fullname 
    GROUP BY UserTable.UserName, UserInfo.Fullname 
相關問題