我有一个类似于以下示例的表,该表是从内容管理系统的 IIS 中使用 ODBC 日志记录中提取的。
logtime 用户名操作目标参数
2012-05-24 18:13:23.000 - 获取 /beta.pptx 标题 = 主页
2012-05-24 18:13:14.000 - 获取 /index.php -
2012-05-24 18:13:09.000 域\乔 GET /css.php -
我想找出谁在下载什么文件(如 PPTX 和 DOCX 文件)。由于 target 包含 PPTX 或 DOCX 文件名的行没有相应的用户名,我想我可以从 logtime 在表中向后追溯,以找到下一行的用户名条目不是“-”到加入列出 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 (select Top 1 temp2.username from InternetLog as temp2 where temp2.logtime <= temp.logtime and temp2.username != '-' order by temp2.logtime desc) 作为用户名,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