SQL - 查询多个列时最多 returns 个结果

SQL - MAX returns multiple results when querying more than one column

这是我的第一个 post 因为我通常可以通过浏览这里的其他问题找到答案,但我已经尝试按照一些建议的说明进行操作,例如 this, this, this or this,但是没用。

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

但为简单起见,因为仅从单个 table 中提取用户 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

我曾尝试将 WHERE 子句替换为 HAVING,并尝试使用 CTE 并在 WHERE 子句中嵌套 SELECT,但我对 SQL 的了解有点零散,我希望你们中的聪明人能够提供一些帮助。

Ta

您正在按 LogoutDateTime 分组。只需删除它。

Use MicrosoftDynamicsAX

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

GROUP BY USERID

ORDER BY USERID