1

ユーザーのログインとログアウトを追跡するテーブルがあります。

このクエリは、最後のアクションが最初などの順序ですべてのレコードを返します。

SELECT  [entryid]
      ,[index]
      ,[sessionid]
      ,[UserName]
      ,[UserPublicIP]
      ,[EntryDateTime]
      ,[ServerIP]
      ,[EventDesc]
  FROM [DB].[dbo].[table]
  order by EntryDateTime desc

現在ログインしているユーザーを返すクエリが必要です。

EventDesc の可能な値は次のとおりです。

Session Login Succeeded
Session Logoff Succeeded
Session reconnection succeeded
Session has been disconnected
Shell start notification received
etc

最後の EntryDesc があった行からユーザー名 (および他の列) をリストする q SQL クエリを作成するにはどうすればよいですか: セッション ログイン成功またはセッション再接続成功、つまりユーザー ログイン。

以下のような Distinct & Group By クエリを使用してみましたが、うまくいかないようです。

Select * From [DB].[dbo].[table] Group By Username
Select Distinct Username From [DB].[dbo].[table]

参考までに: ユーザー ログがログに記録されるたびにテーブルに行が作成されるため、クエリでは問題のユーザー名の最新の行を選択する必要があります。

4

1 に答える 1

1

特定の日付より前の各ユーザーの最後のレコードを探しています。構文から、SQL Server を使用していると推測できます。もしそうなら、あなたはこれを行うことができますrow_number()。次のクエリは、特定の日付より前の最後の行を取得します。

select t.*
from (select t.*,
             row_number() over (partition by Username order by EntryDatetime desc) as seqnum
      from t
      where EntryDatetime < @Datetime
     ) t
where seqnum = 1;

これを集計してカウントを取得するには:

select count(*)
from (select t.*,
             row_number() over (partition by Username order by EntryDatetime desc) as seqnum
      from t
      where EntryDatetime < @Datetime  -- <-- remove this for the most recent entries
     ) t
where seqnum = 1 and 
      EntryDesc in ('Session Login Succeeded', 'Session reconnection succeeded');

whereデータベースの最新のエントリが必要な場合は、内部句を削除できます。

于 2013-05-26T13:57:06.037 に答える