2016-07-14 16 views
0

我有一张表来记录人们何时登录系统。每次用户成功登录时,都会使用用户名和登录时间创建新行。
因此,用户可能会多次出现,例如在下表中,Sam和Steve出现两次,因为他们在不同的日子登录过。仅从表中选择最近创建的行,其中包含重复项

+-----------+------------------+ 
| user_name | login_time | 
+-----------+------------------+ 
| Sam  | 2016-07-14 12:00 | 
| Steve  | 2016-07-13 09:30 | 
| Sam  | 2016-07-13 11:00 | 
| Simon  | 2016-07-14 09:00 | 
| Albert | 2016-07-14 10:30 | 
| Steve  | 2016-07-11 09:00 | 
+-----------+------------------+ 

我要查询该表得到的只是最后一次用户登录的列表。
正如你可以在重复山姆和史蒂夫下面的例子中看到被拆除,只有最新(距离今天最近)登录时间保持不变。

+-----------+------------------+ 
| user_name | login_time | 
+-----------+------------------+ 
| Sam  | 2016-07-14 12:00 | 
| Steve  | 2016-07-13 09:30 | 
| Simon  | 2016-07-14 09:00 | 
| Albert | 2016-07-14 10:30 | 
+-----------+------------------+ 

我不知道如何做到这一点,我无法找到一个内置函数。
我想我应该使用MAX()来选择最近的日期,但不知道在哪里把这个。
我想我可以在SELECT中使用SELECT来做到这一点,但没有成功。

如何仅选择每个用户的最后登录时间?

回答

3

在user_name上进行聚合并获取登录时间的max值。

select user_name,max(login_time) as last_login 
from users 
group by user_name 
+0

我知道每个人都必须这样说,但该死的我肯定这是我尝试的第一件事之一!我一定是在某处弄错了我的语法。谢谢! – Equalsk

相关问题