0

サイトにアクティビティログテーブルがあります。ログインごとに、日付/時刻、ユーザーID、およびIPアドレスの列があります。

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

SQL Serverでt-sqlを使用してテーブルからこれを取得するための最良の方法は何ですか?

4

3 に答える 3

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
于 2012-04-17T16:12:26.510 に答える
1

ここでいくつかの列/テーブル名を推測しています.ユーザー名はテーブルからのものであると想定しています(そして、ユーザー名を毎回ログに保存していません):

;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;
于 2012-04-17T16:15:44.933 に答える
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
于 2012-04-17T16:18:32.403 に答える