不同的用户,获取最后的登录信息

时间:2013-12-03 19:43:19

标签: sql tsql

我发现了一些我自己无法解决的问题。缺乏解决问题的技巧...... :(

我需要获得结果以选择具有其ID的每个用户,并显示他们的上次登录信息, 例如,从这张表:

id      name        loginTime                           logoutTime
3       test        2013-11-25 22:50:00                 null
4       test1       2013-11-20 07:23:18                 null
6       test2       2013-11-19 11:17:22                 null
3       test3       2013-11-27 14:20:54                 null
16      test4       2013-11-09 13:52:21                 null
3       test        2013-12-02 23:07:43                 null
2       test5       2013-11-11 18:15:31                 null
4       test1       2013-11-17 19:13:59                 null
6       test2       2013-11-30 03:10:07                 null
...

我需要得到:

id      name        loginTime                           logoutTime
2       test5       2013-11-11 18:15:31                 null
3       test        2013-12-02 23:07:43                 null
4       test1       2013-11-20 07:23:18                 null
6       test2       2013-11-30 03:10:07                 null
16      test4       2013-11-09 13:52:21                 null
...

到目前为止,我已经使用DISTINCT来区分用户,但是每个不同用户的最后登录日期都存在问题...

实现这一目标的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

select max(loginTime), id, name
from your_table
group by id, name

答案 1 :(得分:0)

SELECT id, name, logintime, logouttime a from table where logintime=(select max(logintime) from table b where a.id = b.id)

答案 2 :(得分:0)

在CTE中使用row_number()对它们进行排序,然后过滤选择中的最新内容:

declare @log table (id int, name varchar(10), loginTime datetime, logoutTime datetime);
insert into @log
select 3,       'test',        '2013-11-25 22:50:00',                 null union all
select 4,       'test1',       '2013-11-20 07:23:18',                 null union all
select 6,       'test2',       '2013-11-19 11:17:22',                 null union all
select 3,       'test3',       '2013-11-27 14:20:54',                 null union all
select 16,      'test4',       '2013-11-09 13:52:21',                 null union all
select 3,       'test',        '2013-12-02 23:07:43',                 null union all
select 2,       'test5',       '2013-11-11 18:15:31',                 null union all
select 4,       'test1',       '2013-11-17 19:13:59',                 null union all
select 6,       'test2',       '2013-11-30 03:10:07',                 null


;with yak as
(   select  [r]=row_number()over(partition by name order by loginTime desc), * 
    from @log
)
select * 
from yak 
where r = 1;

您也可以像其他答案中提到的那样MAX(LoginDate)