我有一个类似于以下例子的表格,这是从使用ODBC与IIS进行内容管理系统的ODBC记录中提取的。
logtime username operation target parameters
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 domainjoeh GET /css.php -
我试图找出的是谁正在下载哪些文件(如 PPTX 和 DOCX 文件 ) 。 由于目标所在的行中包含 PPTX 或 DOCX 文件名称的行中没有相应的用户名, 因此我可以从日志时间向后追溯到表格中找到下一个行, 该行除了“ - ” 以外还有用户名条目可以加入 PPTX 或 DOCX 文件列表的行。 在我测试中, 这似乎是准确的 。 因此, 我如何创建可以让我完成此目的的选定语句?
显示日期印章和每个用户每天仅一例确切文件名:
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 (select Top 1 temp2.username from InternetLog as temp2 where temp2.logtime <= temp.logtime and temp2.username != - order by temp2.logtime desc) as username, LEFT(CONVERT(DATETIME, temp.logtime, 101), 11) AS logdate, temp.target from InternetLog as temp where (RIGHT(RTRIM(temp.target),4) = docx or RIGHT(RTRIM(temp.target),4) = pptx ) ) AS v WHERE v.username LIKE %johnd% order by logdate desc