不可能。想想看,不排序去判断distinct性能的代价是否大了点?这是个基本算法问题。

解决方案 »

  1.   

    distinct  group by都要进行排序。没有办法了,oracle是那样设计的。
      

  2.   

    记录集如下:
    ------------------------------
    [money]  [time]
    3373     199901
    3373     199902
    3373     199903
    3373     199904
    3373     199905
    3373     199906
    2899     199907
    2899     199908
    2899     199909
    2899     199910
    2899     199911
    2899     199912
    ---------------------------------------
    当筛选出数据money列后,得到:
    2899
    3373
    因为它是默认自动排序(升序)
    可我要取的值,必须不能改变顺序,也就是[money]列原先数据怎样排序,筛选出来的数据排序不变。
    请赐教!!!(分不够在加)
      

  3.   

    我是说order by rowid是否可以重新搞定“弄乱”顺序的结果呢?:)
      

  4.   

    不行,你的方法我试了。
    select * from (SELECT distinct BASE FROM PAY_TEMP WHERE id=45563 AND TIME LIKE '1999%' AND INSUREID = '110104541204163')  order by rowid
    这个不行的
    还有别的方法吗??
      

  5.   

    把rowid to_char后(可能还要再做16进制转换)再排序呢
      

  6.   

    你是想找到第一个 money 然后再找到对应的time吧
    下面的两个语句或许有用
    ops$lg\[email protected] >select *
      2    from emp
      3   where hiredate = ( select max(hiredate) from emp e2 where e2.deptno =
      4  emp.deptno)
      5  /     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
          7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20
          7900 JAMES      CLERK           7698 03-12月-81            950                    30
          7934 MILLER     CLERK           7782 23-1月 -82           1300                    10ops$lg\[email protected] >select *
      2    from ( select emp.*, max(hiredate) over ( partition by deptno ) max_hd
      3             from emp
      4         )
      5   where hiredate = max_hd
      6  /
      

  7.   

    还不是各位大虾想得那样,我有一个函数(带两个参数X,Y)我会把筛选出来的两个数赋值给X,Y
    因该是x=3373,Y=2899,但oracle自动排序了,所以值就赋反了,这个问题还不能重新排序,因为有的时候,记录集里的数据可能会是
    [money]   [time]
    2563      200001
    2563      200002
    ...       ...
    3012      200006
    3012      200007
    ...       ...
    筛选出来以后就应该是小的数在前,所以,最好是去掉自动排序
    时间在这里这是一个参考,我不取的。
      

  8.   

    据说distinct排序是可以提高检索的性能,是这样的吗.
      

  9.   

    是的,oracle的内部设计就是先排序在筛选,这也正是我郁闷的地方,实在不行我就只好改程序了。明天结贴
      

  10.   

    select money from
    (select min(rowid) rd,money
    from test group by money) order by rd;
    这样不知道行不行??
    取最小的rowid,这样保证取出同样的money中先录入的记录。
    然后按这个rowid升序排列取money。
    需要贴主再测试一下。
      

  11.   

    !!!!!!!!!!!!!!!Thanks!!!!!!!!!!!!!!!!!!