テーブルdbo.AllApps
は、実行されたすべての実行可能ファイルをログに記録し、exeハッシュ値を格納する列ApplicationHash
、exeを実行したUserIDを格納する列UserName
を保持します。SQL Server:追加のCOUNT列で結果を1行に返します
exeが10回実行された場合、テーブルには同じ情報がありますが、タイムスタンプとそのインスタンスを実行したユーザーが異なるエントリが10個あります。
私は10の1行(すべての列time、name、desc ...)だけでなく、exeが持つ回数のカウントを提供する列を返すレポートを生成したいと思います実行された行数(この例では合計行数10)と、exeを実行した一意のユーザー数のカウント(この例では3)です。
提案がありますか?
ApplicationHash TimeStamp UserName
-----------------------------------
ABCDE12345 00:00:05 User1
ABCDE12345 00:02:05 User2
ABCDE12345 00:04:05 User1
ABCDE12345 00:10:05 User3
ABCDE12345 00:15:05 User3
ABCDE12345 00:20:05 User1
ABCDE12345 00:21:05 User2
ABCDE12345 00:33:05 User2
ABCDE12345 00:45:05 User1
ABCDE12345 00:55:05 User1
結果は次のようにsomethineする必要があります:
ここApplicationHash ProcessCount UserCount
--------------------------------------
ABCDE12345 10 3
は、誰かがいるとProcessCount
問題を解決しない思い付いたものですが、私はユニークなユーザー名が同様に数える必要があります。
declare @StartDate datetime = '20170401';
declare @EndDate datetime = '20170406';
select top 1 with ties
ProcessCount = count(*) over (partition by ApplicationHash)
, ApplicationHash
, ProcessStartTime
, ApplicationType
, Description
, Publisher
, ProductName
, ProductVersion
, EventDescription
, CommandLine
, FileName
from dbo.AllApps aa
where TokenType = 'Elevated'
and ApplicationType != 'com Class'
and ApplicationType != 'ActiveX Control'
and ProcessStartTime >= @StartDate
and ProcessStartTime < @Enddate
and ProductName = 'WizSvcUt Application'
order by row_number() over (partition by ApplicationHash order by ProcessStartTime desc)
この小文字を短くしてください。 – niksofteng