我正在尝试从每个用户获取最后的登录时间但是,当我在select语句中使用MAX时,SQL查询不起作用会抛出有关Group By的错误,如果我不使用MAX,则查询返回正确的结果。以下是日期示例:
用户表
.nomargin { margin:0 }
的UserInfo
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
代码
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
答案 0 :(得分:1)
您的表别名位于错误的位置:
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;
函数无关。我也强烈反对使用列别名的单引号。很容易将列名与字符串常量混淆。
我还建议您学习使用表别名的缩写:
select min(date) from fixtures where date>current_date
这使查询更容易编写和阅读。
答案 1 :(得分:-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