SQL Datediff with group by

时间:2013-10-22 17:39:21

标签: sql group-by datediff

我有一个名为Login的表。我想获得每个用户上次登录的天数
请参阅以下示例数据:

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  

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

如果您想获得每个用户的最新登录信息,请尝试此操作。

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

我们的想法是使用GROUP BY按用户名对所有行进行分组,使用MAX聚合函数只获取具有最新LoginDateTime的行,然后计算使用该最新loginDateTime的天数。