首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > IBM DB2 >

这个SQL语句效率低上,求指导

2013-01-08 
这个SQL语句效率低下,求指导是这样的。数据库是DB2的数据库,有一个表,称为资产流水变化吧,里面存放的字段有

这个SQL语句效率低下,求指导
是这样的。数据库是DB2的数据库,有一个表,称为资产流水变化吧,里面存放的字段有
变化流水号(主键)    资产id    原来的使用部门    现使用部门         原状态    现状态
change_id         asset_id  old_use_dept     new_use_dept  old_status new_status

变换时间
change_date

主要就是这个几个字段,现在要在进行数据帅选。条件为:
1 原来使用部门不等于现在使用部门,如果中间出现多次变动,但是第一次变动和最后一次变动的部门不相同的,并且把最新的一跳记录的old_use_dept字段的值替换成该资产第一次出现的时候的值,如果第一次变动和最后一次变动额部门相同的话不需要显示
2 如果一个资产id出现多次,只显示最后一次出现的记录,其他的不管
3 如果一个资产id出现多次,只显示最后一次出现的记录,其中,显示的该记录的old_status的字段的值是该资产ID第一次出现的原状态。
说的不是很清楚,模拟几个数据,给大家看看吧,change_date写不下了。以c代替吧
change_id   asset_id  old_use_dept new_use_dept old_status new_status  change_date
1          123       90            91           2          2           2012-12-14 
2          123       89            92           1          2           2012-11-14 
3          1234      90            91           2           1          2012-10-14
4          1234      91            90           3           2          2012-10-12
如上记录,我要的结果是
change_id   asset_id  old_use_dept new_use_dept old_status new_status  change_date
1            123       89           91             1          2       2012-12-14

3-4记录不需要显示,因为3-4记录的部门变动记录是从91变动到90再从90变动到91,相当于没有变动。不需要显示   
     
[解决办法]


[解决办法]
引用:
那我发出来估计你们不会看了。。


把帖子移到DB2的版块去吧  然后把你的语句发上来  优化这块大家还是比较有兴趣的
[解决办法]
呵呵,返回了多列
这样先试试
SELECT A.change_id,A.asset_id,  A.new_use_dept ,A.new_status,A.change_date
FROM TT A WHERE NOT EXISTS(SELECT 1 FROM TT WHERE A.asset_id=asset_id AND A.change_id>change_id)


 AND NOT EXISTS(SELECT 1 FROM TT WHERE A.old_use_dept=new_use_dept AND A.asset_id=asset_id)
[解决办法]
在asset_id、change_id、old_use_dept、new_use_dept上建立索引试试

热点排行