我一直在使用我的原始IIS日志文件导入sql Server表
Log Parser工具现在已有几个月了.这样做是为了能够编写
SSRS根据此日志数据进行报告.
Log Parser工具现在已有几个月了.这样做是为了能够编写
SSRS根据此日志数据进行报告.
我正在研究的报告之一应该是确定的数量
访问每个唯一的IP地址.访问被定义为IP地址命中
网站上的一个页面,然后在一个小时内再发出4个请求
其他.所有5个请求都在一次访问网站内.后来就是这样
晚上,相同的IP地址访问该网站,除了现在是3小时后,所以
我们将这个新活动计入与新访问相同的IP中.这是一个样本
数据:
IPAddress,RequestDateTime,UriStem 10.1.1.100,2010-10-15 13:30:30,/ 10.1.1.100,2010-10-15 13:30:31,/style.css 10.1.1.100,/script.js 10.1.1.100,2010-10-15 13:30:32,/funny.gif 10.1.1.100,2010-10-15 13:30:33,/picture.jpg 10.1.1.101,2010-10-15 13:40:50,/page2.html 10.1.1.101,2010-10-15 13:40:51,/style.css 10.1.1.102,2010-10-15 14:10:20,/page4.html 10.1.1.102,2010-10-15 14:10:21,2010-10-15 16:55:10,2010-10-15 16:55:11,2010-10-15 16:55:12,2010-10-15 16:55:13,/picture.jpg
通过查看上面的数据,我可以很容易地看出10.1.1.100 IP
地址已经访问过该网站两次,每次访问都有5次点击.但是,我
不知道如何在sql代码中表达它.是否有一种简单的分组方式
并按IP地址计算这些日期范围?
我知道可以使用诸如此类工具捕获此信息
AWStats,但我没有能够安装Perl的奢侈品
我们使用的系统.
解决方法
将代码提供给试运行.代码对来自每个IP地址的访问进行分组和编号.然后,它会查看与“阈值”值相比有多少“uristem”命中.我在名为“Foo”的表上测试了代码,您需要在运行测试之前检查表名和列名.
DECLARE @threshold INT; SET @threshold = 4; --this number should not include the initial visit DECLARE @lookbackdays int; SET @lookbackdays = 300; ;WITH postCTE as ( SELECT ipaddress,uristem,requestdatetime,RowNumber = ROW_NUMBER() OVER (ORDER BY ipaddress,requestdatetime ASC) FROM Foo --put your table name here WHERE requestdatetime > GETDATE() - @lookbackdays ) --select * from postCTE SELECT p1.ipaddress AS [ipaddress],p2.RowNumber - p1.RowNumber +1 AS [Requests],p1.requestdatetime AS [DateStart] FROM postCTE p1 INNER JOIN postCTE p2 ON p1.ipaddress = p2.ipaddress AND p1.Rownumber = p2.RowNumber - (@threshold ) WHERE DATEDIFF(minute,p1.requestdatetime,p2.requestdatetime) <= 60
ipaddress Requests DateStart 10.1.1.100 5 2010-10-15 13:30:30.000 10.1.1.100 5 2010-10-15 16:55:10.000