【问题标题】:SQL Datediff with group bySQL Datediff 与分组依据
【发布时间】:2013-10-22 17:39:21
【问题描述】:

我有一个名为 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  

感谢任何帮助。

【问题讨论】:

    标签: sql group-by datediff


    【解决方案1】:

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

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

    这个想法是使用GROUP BY将所有行按用户名分组,并使用MAX聚合函数仅获取具有最新登录日期时间的行,然后使用最新登录日期时间计算天数。

    【讨论】:

    • 感谢您的回复,但我收到错误“在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。”
    • 我在几分钟前更新了答案,检查我在 datediff 函数中将 MAX 添加到 loginDateTime
    • 奇怪,ID 在 GROUP BY 中,没有引起任何问题。
    • @Anjali,可能是的,我试图解释更多答案。
    • @Anjali,如果您包含字段 ID,如果查询正常,请出示您的证据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多