匹配不同的列模式我有类似于从使用ODBC日志记录与IIS的内容管理系统中提取下面的示例中的表。SQL语句从早期行
logTime Description该条 用户名 操作 目标 参数
2012-05-24 18:13:23.000 - GET /beta.pptx 标题=家庭
2012-05-24 18:13:14.000 - GET 的index.php -
2012-05-24 18点13分09秒。000 域\ joeh 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 TOP 1 TEMP2。从InternetLog用户名 作为TEMP2 其中temp2.logtime < = temp.logtime 和temp2.username =! ' - ' 为了通过temp2.logtime降序)作为用户名, LEFT(CONVERT(DATETIME,temp.logtime,101) ,11)AS logdate, temp.target 从InternetLog作为临时 其中(RIGHT(RTRIM(temp.target),4)= '的docx' 或RIGHT(RTRIM(temp.target),4)= 'PPTX') )AS诉 WHERE v.username LIKE '%JOHND%' 的LOGDATE倒序
我不知道我认为你的标题只是足够长的时间才能开始考虑描述你想要解决的问题的类型。 –
我接受任何有关您认为更好的标题的建议。我认为这不是一件容易总结的事情,它应该有希望吸引SQL专家。 – techguy817
'匹配前一行不同列中的模式'如何? –