2017-02-22 3 views
1

Я пытаюсь получить последнее время входа от каждого пользователя, но, когда я использую MAX в инструкции select, SQL-запрос не работает, он выдает ошибку о Group By, где if Я не использую MAX, запрос возвращает правильные результаты. Вот пример даты:Получить последнее время для каждого пользователя с SQL-запросом

Usertable

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 

Желаемая Result

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 
Смежные вопросы