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

求助:Oracle检索结果的多列比较
oracle中有greatest和least两个函数用来得到多列数据中的最大值和最小值.
可是好像没办法得到多列数据中的次大值、第三大值...这些数据
我目前的做法是,把需要对比的多列进行行转列,
接着row_number()OVER(PARTITION BY col1 ORDER BY col2 desc)
这样来获得

可是效率上低了很多!
敢问各位大大,是否小弟孤陋寡闻,Oracle中还有其他函数来获取这些值?
又或者有更好的思路以获取这些值?
不胜感激

------解决方案--------------------
rank()排序函数试试
------解决方案--------------------
列数少可以

greatest(
decode(a,greatest(a,b,c),least(a,b,c),a),
decode(b,greatest(a,b,c),least(a,b,c),b),
decode(c,greatest(a,b,c),least(a,b,c),c)
) second_