日期:2014-05-18  浏览次数:20679 次

SQL Server流水时间统计
各位好,小弟目前需要做一个查询统计,使用SQL 2005,描述如下

SQL code

两个表
A表是流水表,B表是基础表


A表
IP               时间
192.168.1.1     2012-02-01 08:00:00
192.168.1.3     2012-02-01 08:00:01
192.168.1.3     2012-02-01 08:01:00
192.168.1.1     2012-02-01 08:01:00
192.168.1.1     2012-02-01 08:06:00
192.168.1.3     2012-02-01 08:07:00
192.168.1.3     2012-02-01 09:01:00
192.168.1.4     2012-02-01 09:07:00


B表

IP            开始时间1               结束时间1         开始时间2            结束时间2
192.168.1.1   9:00                    11:30              2:00                 5:30
192.168.1.2   9:00                    11:30              2:00                 5:30
192.168.1.2   9:00                    11:30              2:00                 5:30
192.168.1.4   9:00                    11:30              2:00                 5:30
192.168.1.5   9:00                    11:30              2:00                 5:30


假如现在的时间是早上10:00,我想查询出每个IP在【开始时间1 、结束时间1、开始时间2和结束时间2之间】时间差大于5分钟的数据
查询结果

IP                开始时间                 结束时间           差距
192.168.1.1    2012-02-01 09:00:00       2012-02-01 10:00:00   60
192.168.1.2    2012-02-01 09:00:00       2012-02-01 10:00:00   60
192.168.1.3    2012-02-01 09:01:00       2012-02-01 10:00:00   59
192.168.1.4    2012-02-01 09:00:00       2012-02-01 09:07:00   7
192.168.1.4    2012-02-01 09:07:00       2012-02-01 10:00:00   53
192.168.1.5    2012-02-01 09:00:00       2012-02-01 10:00:00   60


首次发帖,感谢阅览




------解决方案--------------------
SQL code

CREATE TABLE #TestA
(
    ip NVARCHAR(20),
    dates DATETIME    
)
INSERT INTO #TestA values('192.168.1.1','2012-02-01 08:00:00')
INSERT INTO #TestA values('192.168.1.3','2012-02-01 08:00:01')
INSERT INTO #TestA values('192.168.1.3','2012-02-01 08:01:00')
INSERT INTO #TestA values('192.168.1.1','2012-02-01 08:01:00')
INSERT INTO #TestA values('192.168.1.1','2012-02-01 08:06:00')
INSERT INTO #TestA values('192.168.1.3','2012-02-01 08:07:00')
INSERT INTO #TestA values('192.168.1.3','2012-02-01 08:01:00')
INSERT INTO #TestA values('192.168.1.4','2012-02-01 08:07:00')

CREATE TABLE #TestB
(
    ip NVARCHAR(20),
    beginDate1 NVARCHAR(20),
    endDate1 NVARCHAR(20),
    beginDate2 NVARCHAR(20),
    endDate2 NVARCHAR(20)        
)
INSERT INTO #TestB VALUES ('192.168.1.1','9:00','11:30','2:00','5:30')
INSERT INTO #TestB VALUES ('192.168.1.2','9:00','11:30','2:00','5:30')
INSERT INTO #TestB VALUES ('192.168.1.3','9:00','11:30','2:00','5:30')
INSERT INTO #TestB VALUES ('192.168.1.4','9:00','11:30','2:00','5:30')
INSERT INTO #TestB VALUES ('192.168.1.5','9:00','11:30','2:00','5:30')

SELECT * FROM #TestA
SELECT * FROM #TestB

DROP TABLE #TestA
DROP TABLE #TestB

测试数据都写好了,才发现需求很2,先贴这,等楼主需求讲明白了。方便大家。楼主,你检查一下,是不是上面的数据随便写的没写出点规律啊,哪个是A表中如何判断哪个是开始时间,哪个是结束时间啊。

------解决方案--------------------