【问题标题】:Get Last Time for Each user with SQL Query使用 SQL 查询获取每个用户的上次时间
【发布时间】:2017-02-22 14:49:22
【问题描述】:

我正在尝试从每个用户那里获取最后一次登录时间,但是,当我在 select 语句中使用 MAX 时,SQL 查询不起作用,它会引发关于 Group By 的错误,如果我不使用 MAX,查询将返回正确的结果。以下是日期示例:

用户表

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

想要的结果

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

【问题讨论】:

  • 您应该用您正在使用的数据库标记问题(尽管在这种情况下并不真正相关,但这是本网站的一个好习惯)。

标签: sql


【解决方案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;

这些使查询更易于编写和阅读。

【讨论】:

  • 如果我使用 MAX(ut.Endtime) 会抛出错误 Column 'ut.UserName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
【解决方案2】:

这个怎么样

    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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多