2013-10-22 64 views
3

我有一个表称为登录。我想从每个用户的上次登录获得天的第
下面 见样本数据:SQL Datediff与组通过

tableName: Login  
ID|UserName|LoginDateTime 
1 |User1 |04/09/12 18:07:06 
2 |User1 |04/09/12 18:07:51 
3 |User1 |04/09/12 18:21:41 
4 |Admin |17/09/12 15:36:30 
5 |Admin |17/09/12 15:36:30 

这里是我的SQL命令:

SELECT LoginDateTime, UserName,(DATEDIFF (DAY, [LoginDateTime], GETDATE())) 
AS [datediff] 
FROM Login; 

结果:

ID|UserName|LoginDateTime |No. of Days 
1 |User1 |04/09/12 18:07:06|414 
2 |User1 |04/09/12 18:07:51|414 
3 |User1 |04/09/12 18:21:41|414 
4 |Admin |17/09/12 15:36:30|401 
5 |Admin |17/09/12 15:36:30|401 

但我想删除重复记录

ID|UserName|LoginDateTime |No. of Days 
1 |User1 |04/09/12 18:07:06|414 
2 |Admin |17/09/12 15:36:30|401 

感谢您的帮助。

回答

3

试试这个,如果你想获得每个用户的最新登录。

SELECT UserName, MAX([LoginDateTime]) AS LoginDateTime, 
    (DATEDIFF (DAY, MAX([LoginDateTime]), GETDATE())) as [datediff] 
FROM Login 
GROUP BY UserName 

的想法是通过用户名所有的行使用GROUP BY进行分组,并使用MAX聚合函数只得到了最新的LoginDateTime行,然后计算使用最新loginDateTime的天数。

+0

感谢您的回复,但我得到一个错误“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。” – user2617053

+0

我在几分钟前更新了答案,请检查我是否将MAX添加到了datediff函数中的loginDateTime –

+1

奇怪的是,ID在GROUP BY中,这不会导致任何问题。 –