2012-04-17 1 views
0

サイトにアクティビティログテーブルがあります。各ログインの日付/時刻、ユーザーID、IPアドレスの列があります。ログインログから最新のIPアドレスを取得

ログインした一意のユーザー名と最新のIPアドレスのリストを取得したいとします。

SQL Serverでt-sqlを使用してテーブルからこれを取得するには、どのような方法が最適ですか?

答えて

2

ポータブルアプローチがある:私はここにいくつかのカラム/テーブル名で推測している

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

、およびI:

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+を持っている場合は、あなたも行うことができます

;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 
:「ユーザ名が表から来ていると仮定すると(とあなたがログに毎回ユーザー名を格納していません)は、M
+1

なぜこれがダウンリストされたのかわかりません。できます。この1つとRedFilterの答えの唯一の違いは、条件に合致する複数の行がある場合(つまり、同じユーザー名が同時に2つのIPアドレスからログを記録する場合)、ユーザー名ごとに1行しか返さないことです。この要件は質問に詳細には記載されていないので、これは完全に有効な答えです。 – deutschZuid

+0

Jamesに感謝します。それは質問に定義されています。一意のuserNameと最後のIP。 – Diego

+0

Diego。いいえ、ちがいます。 OPは、同じユーザー名が2つの異なるIPから同時にログインすることが不可能であると指定していません。だから私はそれが可能であると仮定します。この場合、どちらを選択しますか?それは非決定的です。 – deutschZuid

関連する問題