SQL - MAX在查询多个列时返回多个结果

时间:2016-10-06 02:50:10

标签: sql-server-2012 max where-clause dynamics-ax-2012-r2 having-clause

这是我的第一篇帖子,因为我通常只能通过浏览其他问题找到答案,但我已尝试按照一些建议执行说明,例如thisthis,{{ 3}}或this,但无济于事。

最终我想使用我的查询连接两个表(在MS Dynamics AX中)并显示用户的上次注销日期,以及我从许多表中提取的各种其他详细信息。但是,在第一个例子中,当我尝试检索上次注销日期时,我返回了数千列,而不是我预期的几百列(...并且没有包含最后一个日期列。)

但是为了简单起见,因为当从单个表中提取用户ID和上次注销日期时会显示相同的行为,这是我的查询(我只返回了用户名的最右边三个字符)匿名数据):

Use MicrosoftDynamicsAX

SELECT  MAX(LOGOUTDATETIME) as LastLoggedOut,
        RIGHT(USERID,3) as UserName
FROM SYSUSERLOG

GROUP BY LOGOUTDATETIME,
    USERID

ORDER BY USERID

从这里我得到了17,632行返回,因为它带回了所有最后注销日期的用户的每个实例!

例如,这是此查询返回的结果的一小部分示例:

LastLoggedOut   UserName
2015-09-03 07:40:36.000 nts
2015-09-03 07:43:20.000 nts
2015-09-03 07:44:10.000 nts
2015-09-03 07:47:44.000 nts
2015-09-03 07:56:33.000 nts
2015-09-03 08:05:11.000 nts
2015-09-04 02:18:58.000 nts
2015-09-15 01:23:59.000 nts
2015-09-15 06:27:13.000 nts
2015-09-15 06:59:44.000 nts
2015-09-15 07:01:33.000 nts

然而,我正在寻找的更像是这样:

LastLoggedOut   UserName
6/10/2016 2:14:57   nbr
6/10/2016 2:14:22   ulc
6/10/2016 2:14:18   nne
6/10/2016 2:14:10   nci
6/10/2016 2:13:30   hae
6/10/2016 2:12:46   001
6/10/2016 2:11:31   idb
6/10/2016 2:10:38   rin

我已经尝试过交换HAVING的WHERE子句,以及尝试CTE并在WHERE子句中嵌套SELECT,但我对SQL的了解有点不完整,我希望你们中的一个聪明的人可能能够提供一些帮助。

TA

1 个答案:

答案 0 :(得分:0)

您按LogoutDateTime进行分组。只需删除它。

Use MicrosoftDynamicsAX

SELECT  MAX(LOGOUTDATETIME) as LastLoggedOut,
        RIGHT(USERID,3) as UserName
FROM SYSUSERLOG

GROUP BY USERID

ORDER BY USERID