0

Это мое первое сообщение, потому что я обычно могу найти ответы, просмотрев другие вопросы здесь, но я попробовал следующие инструкции по нескольким предложениям, например this, this, this или this, но безрезультатно.SQL-MAX возвращает несколько результатов при запросе более одного столбца

В конечном итоге я хочу использовать мой запрос для объединения двух таблиц (в MS Dynamics AX) и показать последнюю дату выхода для пользователей, а также различные другие детали, которые я вытащил из нескольких таблиц. Тем не менее, в первом случае, когда я попытался получить последнюю регистрационную дату, у меня появилось тысячи столбцов вместо пары сотен, которые я ожидал (... и получил без последнего столбца даты).

Но для того, чтобы сделать его простым, поскольку такое же поведение проявляется при простое вытаскивание идентификатора пользователя и последнего выхода из даты из одной таблицы, это мой запрос (я вернул только правые три символа имени пользователя для анонимного данные):

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 и вложенный SELECT в предложение WHERE, но мои знания SQL немного размыты, и я надеялся, что один из вас умных людей сможет оказать некоторую помощь.

Ta

Dan

ответ

0

Вы группирование по LogoutDateTime. Просто удалите это.

Use MicrosoftDynamicsAX 

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

GROUP BY USERID 

ORDER BY USERID 
+0

Большое спасибо. Алекс, мне нужно сделать немного исследований в GROUP BY, это поймало меня пару раз! –

+0

Без проблем, легко исправить. –

Смежные вопросы