(100分求解)超难题!查找在某时间段内的匹配记录
说明:表A是用户上下线记录,表B是用户在线期间的动作记录。
表A结构如下:
action ip time user
上线 21.12.34.7 2007-1-12 10:23:12 u1
上线 21.12.33.9 2007-1-12 10:23:17 u2
。。。。
下线 21.12.34.7 2007-1-12 16:20:15 u1
下线 21.12.33.9 2007-1-12 16:20:18 u2
。。。。
表B结构如下:
time srcip fromid destip toid
2007-1-12 11:24:12 21.12.34.7 f1 192.168.0.1 t1
2007-1-12 11:24:23 21.12.33.9 f2 192.168.0.4 t2
。。。。
2007-1-12 11:28:18 192.168.0.1 t1 21.12.34.7 f1
。。。。
2007-1-12 11:29:12 192.168.0.4 t2 21.12.33.9 f2
。。。。
请问高手,如何根据时间和ip找到某帐号在线期间所使用的id?
如上表,账号u1在线期间所使用的id为f1。
------解决方案--------------------declare @a table(action varchar(10), ip varchar(20), [time] smalldatetime, [user] varchar(10))
insert @a select '上线 ', '21.12.34.7 ', '2007-1-12 10:23:12 ', 'u1 '
union all select '上线 ', '21.12.33.9 ', '2007-1-12 10:23:17 ', 'u2 '
union all select '下线 ', '21.12.34.7 ', '2007-1-12 16:20:15 ', 'u1 '
union all select '下线 ', '21.12.33.9 ', '2007-1-12 16:20:18 ', 'u2 '
declare @b table(time smalldatetime, srcip varchar(20), fromid varchar(20), destip varchar(20), toid varchar(10))
insert @b select '2007-1-12 11:24:12 ', '21.12.34.7 ', 'f1 ', '192.168.0.1 ', 't1 '
union all select '2007-1-12 11:24:23 ', '21.12.33.9 ', 'f2 ', '192.168.0.4 ', 't2 '
union all select '2007-1-12 11:28:18 ', '192.168.0.1 ', 't1 ', '21.12.34.7 ', 'f1 '
union all select '2007-1-12 11:29:12 ', '192.168.0.4 ', 't2 ', '21.12.33.9 ', 'f2 '
select * from @b bb,
(select ip,[user], stime=(select min([time]) from @a where ip=a.ip and [user]=[a].[user] and action= '上线 '),xtime=(select min([time]) from @a where ip=a