2013-07-09 10 views
1

У меня есть таблица userlog (ID, Логин (DateTime), Идентификатор_пользователь, IP, UserAgengt ...)MAX функции SQL Server

То, что я хочу, чтобы получить все данные для eachuser для нового Логина.

Select UserID, MAX(Login), IP, UserAgent 
From userlog 
Group by UserID, IP, UserAgent 

Это даст мне несколько записей для одного пользователя, если он имеет несколько IP-адресов и/или UserAgent ... и я хочу, данные строки, которые имеют максимальный срок регистрации.

ответ

1
Select u1.UserID, u1.Login, u1.IP, u1.UserAgent 
From userlog u1 
inner join 
(
    Select UserID, max(Login) as mLogin 
    From userlog 
    Group by UserID 
) u2 on u1.UserID = u2.UserID and u2.mLogin = u1.Login 
+0

Я надеялся, что там было решение отличается от присоединения таблицы себя, но, очевидно, есть не один. :) –

4

Я думаю, что самый простой способ сделать это с помощью функции окна row_number():

Вы не должны использовать group by для этой операции.

0

Что-то вроде

SELECT max.userid, max.maxlog, ul.ip, ul.useragent 
FROM 
(Select UserID, Max(Login) maxlog 
From userlog 
group by userID) 
max 
inner join userlog ul on ul.userid=max.userid and ul.login=max.maxlog 
Смежные вопросы