我在網站上有一個活動日誌表。每個登錄都有日期/時間,用戶ID和IP地址列。從登錄日誌中獲取最新的IP地址
我想檢索一個唯一用戶名列表和最近登錄的IP地址。
什麼是在SQL Server上使用t-sql從表中檢索此最佳方法?
我在網站上有一個活動日誌表。每個登錄都有日期/時間,用戶ID和IP地址列。從登錄日誌中獲取最新的IP地址
我想檢索一個唯一用戶名列表和最近登錄的IP地址。
什麼是在SQL Server上使用t-sql從表中檢索此最佳方法?
一種便攜式的做法是:
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
我猜在這裏一些列/表名,和我「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;
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
我不知道爲什麼這是downvoted。有用。這與RedFilter的答案唯一的區別在於,只有符合條件的多行(即,同一用戶名同時從兩個IP地址登錄時),它纔會爲每個用戶名返回一行。由於這個要求在問題中沒有詳細說明,因此這是一個完全有效的答案。 – deutschZuid 2012-04-17 21:34:42
感謝詹姆斯。它是在這個問題上定義的。唯一的用戶名和最後一個IP。 – Diego 2012-04-17 23:09:53
迭戈。不,這不對。 OP沒有指定同一用戶名不可能同時從兩個不同的IP登錄。所以我認爲這是可能的。在這種情況下,你選擇哪一個?這是非確定性的。 – deutschZuid 2012-04-17 23:12:49