欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 02:23:46 责任编辑: Author_N1

 

这个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)
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:23:46
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/9297/
本文WWW.DOC100.NET DOC100.NET版权所有。