サイトにアクティビティログテーブルがあります。各ログインの日付/時刻、ユーザーID、IPアドレスの列があります。ログインログから最新のIPアドレスを取得
ログインした一意のユーザー名と最新のIPアドレスのリストを取得したいとします。
SQL Serverでt-sqlを使用してテーブルからこれを取得するには、どのような方法が最適ですか?
サイトにアクティビティログテーブルがあります。各ログインの日付/時刻、ユーザーID、IPアドレスの列があります。ログインログから最新のIPアドレスを取得
ログインした一意のユーザー名と最新のIPアドレスのリストを取得したいとします。
SQL Serverでt-sqlを使用してテーブルからこれを取得するには、どのような方法が最適ですか?
ポータブルアプローチがある:私はここにいくつかのカラム/テーブル名で推測している
select * from
(
select userID, Date, IpAddress,
Rank() over (Partition BY userID order by Date DESC) as Rank
from Log
) tmp
where Rank = 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;
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つとRedFilterの答えの唯一の違いは、条件に合致する複数の行がある場合(つまり、同じユーザー名が同時に2つのIPアドレスからログを記録する場合)、ユーザー名ごとに1行しか返さないことです。この要件は質問に詳細には記載されていないので、これは完全に有効な答えです。 – deutschZuid
Jamesに感謝します。それは質問に定義されています。一意のuserNameと最後のIP。 – Diego
Diego。いいえ、ちがいます。 OPは、同じユーザー名が2つの異なるIPから同時にログインすることが不可能であると指定していません。だから私はそれが可能であると仮定します。この場合、どちらを選択しますか?それは非決定的です。 – deutschZuid