コンテンツ管理システムの IIS での ODBC ログの使用から抽出された、次の例のようなテーブルがあります。
logtime ユーザー名操作ターゲット パラメータ
2012-05-24 18:13:23.000 - GET /beta.pptx title=home
2012-05-24 18:13:14.000 - GET /index.php -
2012-05-24 18:13:09.000 domain\joeh GET /css.php -
私が調べようとしているのは、誰がどのドキュメント (PPTX や DOCX ファイルなど) をダウンロードしているのかということです。target に PPTX または DOCX ファイル名が含まれる行にはそれぞれのユーザー名がないため、ログ時間からテーブルをさかのぼってトレースし、「-」以外のユーザー名エントリを持つ次の行を見つけて、 PPTX または DOCX ファイルがリストされている行に結合します。私のテストでは、これは正確なようです。では、これを実現できるような select ステートメントを作成するにはどうすればよいでしょうか。
日付スタンプと、ユーザーごとに 1 日あたり 1 つの正確なファイル名のインスタンスのみを示す、次のようにしてうまくいったと思います。
SELECT DISTINCT
v.username
, v.logdate
, SUBSTRING(v.target, CASE WHEN CHARINDEX('=', v.target) > 0 THEN CHARINDEX('=', v.target)+1 ELSE LEN(v.target) END, LEN(v.target)) as 'fileName'
FROM ( select (InternetLog から temp2 として temp2.logtime <= temp.logtime and temp2.username != '-' order by temp2.logtime desc の上位 1 つの temp2.username を選択)、LEFT(CONVERT(DATETIME, temp. logtime, 101), 11) AS logdate, temp.target from InternetLog as temp where (RIGHT(RTRIM(temp.target),4) = 'docx' または RIGHT(RTRIM(temp.target),4) = 'pptx' ) ) AS v WHERE v.username LIKE '%johnd%' logdate desc 順