当前位置: 代码迷 >> DB2 >> 这个SQL语句效率低上,求指导
  详细解决方案

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

热度:6159   发布时间:2013-02-26 00:00:00.0
这个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)
  相关解决方案