日期:2014-05-17  浏览次数:20905 次

如何在同一条数据中选日期最新的字段的值?在线急等!!!!!!
例:表A,在同一行中,比较申请日期,决定日期,处理日期三个字段(都是NUMBER,8),选取日期最新的,并且在范围区间(大于20050101,小于等于20080101)的当作检索条件,该如何写?

请帮忙,谢谢!!~

------解决方案--------------------
greatest(申请日期,决定日期,处理日期)这是取三个字段最新日期的
至于检索条件嘛可以用

greatest(申请日期,决定日期,处理日期) between to_date('20050101','yyyymmdd')
and to_date('20080101','yyyymmdd')

不过这样会让这些字段上的索引失效(假设有索引)
------解决方案--------------------
发现两个问题:
1。为什么总有表的设计人员喜欢用字符串、数字代替日期那?存在潜在的效率问题。
2。业务上应该是,先申请,再决定、再处理吧。难道可以乱来。

引用楼主 z_x_z 的帖子:
例:表A,在同一行中,比较申请日期,决定日期,处理日期三个字段(都是NUMBER,8),选取日期最新的,并且在范围区间(大于20050101,小于等于20080101)的当作检索条件,该如何写?

请帮忙,谢谢!!~

------解决方案--------------------
decode一下就可以了 
类似如下:
SELECT greatest(decode(n,NULL,0,n),decode(m,NULL,0,m)) x FROM test;

探讨
谢谢楼上各位,不过有个新问题,我试验了下,当其中莫个字段为NULL的时候,就检索不出来啊?

------解决方案--------------------
greatest(nvl(申请日期,0),nvl(决定日期,0),nvl(处理日期,0)) between 20050101 and 20080101