从Web服务器日志使用数据时SQL Server日期范围问题

前端之家收集整理的这篇文章主要介绍了从Web服务器日志使用数据时SQL Server日期范围问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在使用我的原始IIS日志文件导入sql Server表
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

我在sql 2008上的测试输出

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

猜你在找的HTML相关文章