|
查看: 915|回复: 8
|
filter record的问题。。。
[复制链接]
|
|
|
发表于 17-12-2008 10:44 AM
|
显示全部楼层
高手!!!我改成我的版本了。。。可是我用了三个declare table。
第一和第二个table我用到2 inner join and few conditions
第三个我把第一和第二的table的资料整理出来。。。
请问这样会导致memory usage高或慢或其他问题吗?我的data都是很多的。。。 |
|
|
|
|
|
|
|
|
|
|
我有两个table
table A:
id date description
1 15/12/2008 6:00pm abc
2 15/12/2008 6:05pm login
3 15/12/2008 6:10pm logoff
4 15/12/2008 6:15pm cba
table B:
id date phase
1 15/12/2008 5:00pm A
2 15/12/2008 6:06pm B
3 15/12/2008 7:00pm C
table A 存住全部发生的event, 包括user login 和logoff。
table B 存住一些特别的event,不会存在table A内的。
我想找出table B 中所有<B>不在</B>user login和logoff之间那段period所发生的event.
请问有什么方法吗?我用vb.net+mssql。还是单单mssql statement就可以做到了?? |
|
|
|
|
|
|
|
|
|
|
发表于 15-12-2008 08:54 PM
|
显示全部楼层
简单的。。。
首先。。。
先找到你要的login和logout的date.
我assume就有两个row的资料。。。。
extract 出来。。。。
再进table B 寻找 table B. datetime >=login datetime AND table B.datetime <= logout datetime
应该可以找到了。。。
可能有sql高手。。。
用一个statement就可以了。。。。
谢谢赐教。。。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 16-12-2008 11:59 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 17-12-2008 01:03 AM
|
显示全部楼层
原帖由 CoLoUrGhOsT 于 16-12-2008 11:59 AM 发表 
不好意思。。。没写清楚。。。login和logout会有很多recordby vb我写好了。。。不过很麻烦。。。要compare很多。。。record = "select * from tableB
loop each record
record2 = select from ...
如果没有parallel login 而且login & logoff in pair
e.g Login -> Logoff -> Login -> Logoff ......
尝试以下方法 (DB Level)
先在Query Analyzer执行,如果行得通,就写成Stored Procedure or Function
另一种方法是利用Cursor去traverse 那些record,比较容易明白
不过,许多人建议别用loop, 因为比较慢 (听说而已,我没试过)
- -- Declare a temp table
- DECLARE @loginPeriod TABLE (startTime datetime , endTime datetime);
- -- Insert Login period to temp table
- INSERT INTO @loginPeriod (startTime, endTime) (SELECT t1.dd
- 'startTime', (SELECT TOP 1 dd FROM tableA t2 WHERE t2.dd > t1.dd AND
- description = 'logoff' ORDER BY dd) 'endTime'
- FROM tableA t1
- WHERE t1.description = 'login')
- SELECT * FROM tableB
- WHERE id NOT IN (SELECT ID FROM tableB bb, @loginPeriod lp WHERE bb.dd BETWEEN lp.startTime AND lp.endTime)
复制代码
Test Data
--------------------------
TableA
1 2008-12-15 18:00:00.000 abc
2 2008-12-15 18:05:00.000 login
3 2008-12-15 18:10:00.000 logoff
4 2008-12-15 18:15:00.000 cba
5 2008-12-15 19:15:00.000 login
6 2008-12-15 19:25:00.000 logoff
8 2008-12-15 20:15:00.000 ggg
TableB
1 2008-12-15 17:00:00.000 A
2 2008-12-15 18:06:00.000 B
3 2008-12-15 18:07:00.000 C
4 2008-12-15 18:08:00.000 D
5 2008-12-15 19:00:00.000 E
6 2008-12-15 19:20:00.000 F
7 2008-12-15 20:00:00.000 G
Result
------------------
1 2008-12-15 17:00:00.000 A
5 2008-12-15 19:00:00.000 E
7 2008-12-15 20:00:00.000 G
[ 本帖最后由 sfkwan 于 17-12-2008 01:09 AM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 17-12-2008 02:48 PM
|
显示全部楼层
原帖由 CoLoUrGhOsT 于 17-12-2008 10:44 AM 发表 
高手!!!我改成我的版本了。。。可是我用了三个declare table。
第一和第二个table我用到2 inner join and few conditions
第三个我把第一和第二的table的资料整理出来。。。
请问这样会导致memory usage高或慢 ...
多少Data? 1Mil? 1Mil - 5Mil? 5Mil - 10Mil? > 10Mil
如果有弄好Index,应该还好
快慢就决定于你的Query optimization (这个你就要请教高手了,我的 SQL & Optimization Skill 还是很烂)
[ 本帖最后由 sfkwan 于 17-12-2008 02:49 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 19-12-2008 09:31 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 29-12-2008 10:16 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 30-12-2008 05:33 PM
|
显示全部楼层
|
哈。。。我也在用着。。很不错下。。。不过不懂那个%会不会因为data的多寡而被影响。。。迟点要来做下实验。。。谢谢你 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|