2012-04-17 59 views
0

我在網站上有一個活動日誌表。每個登錄都有日期/時間,用戶ID和IP地址列。從登錄日誌中獲取最新的IP地址

我想檢索一個唯一用戶名列表和最近登錄的IP地址。

什麼是在SQL Server上使用t-sql從表中檢索此最佳方法?

回答

2

一種便攜式的做法是:

select l.userID, l.Date, l.IpAddress 
from (
    select userID, max(Date) as MaxDate 
    from Log 
    group by userID 
) lm 
inner join Log l on lm.userID = l.userID 
    and lm.MaxDate = l.Date 

如果您有SQL Server的2005+,你也可以這樣做:

select * from 
(
    select userID, Date, IpAddress, 
     Rank() over (Partition BY userID order by Date DESC) as Rank 
    from Log 
) tmp 
where Rank = 1 
1

我猜在這裏一些列/表名,和我「M假設用戶名來自一個表(和你不存儲每個時間日誌中的用戶名):

;WITH x AS 
(
    SELECT userID, IPaddress, rn = ROW_NUMBER() OVER 
    (PARTITION BY UserID ORDER BY datetimecolumn DESC) 
    FROM dbo.LogTable 
) 
SELECT u.username, x.IPAddress 
FROM x INNER JOIN dbo.Users AS u 
ON u.userID = x.userID 
WHERE x.rn = 1; 
0
select distinct(user_name), (select top 1 IP_address from log_table where user_name=LOG.user_name order by log_date desc) 
from log_table LOG 
+1

我不知道爲什麼這是downvoted。有用。這與RedFilter的答案唯一的區別在於,只有符合條件的多行(即,同一用戶名同時從兩個IP地址登錄時),它纔會爲每個用戶名返回一行。由於這個要求在問題中沒有詳細說明,因此這是一個完全有效的答案。 – deutschZuid 2012-04-17 21:34:42

+0

感謝詹姆斯。它是在這個問題上定義的。唯一的用戶名和最後一個IP。 – Diego 2012-04-17 23:09:53

+0

迭戈。不,這不對。 OP沒有指定同一用戶名不可能同時從兩個不同的IP登錄。所以我認爲這是可能的。在這種情況下,你選擇哪一個?這是非確定性的。 – deutschZuid 2012-04-17 23:12:49