从完全重复的表中仅选择最近创建的行

时间:2016-07-14 16:40:50

标签: sql sql-server

我有一张表来记录人们登录系统的时间。每次用户成功登录时,都会使用用户名和登录时间创建新行 因此,用户可能会多次出现,例如在下表中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 |
+-----------+------------------+

我想查询此表以获取用户上次登录时的列表 正如您在下面的示例中所看到的,Sam和Steve的重复项被删除,只保留了最新的(最接近今天)登录时间。

+-----------+------------------+
| 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 |
+-----------+------------------+

我无法弄清楚如何做到这一点,我无法为此找到内置功能。<​​br/> 我以为我应该使用MAX()来选择最近的日期,但无法确定将其放在何处 我以为我可以在SELECT中使用SELECT来做到这一点,但没有成功。

如何为每个用户选择上次登录时间?

1 个答案:

答案 0 :(得分:3)

聚合user_name并获取登录时间的max值。

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