下面这段sql报这个错:
ORA-01446: 无法从含 DISTINCT、GROUP BY 等子句的视图中选择 ROWID
谁能帮我改成正确的呢?
多谢!
select
  *
FROM
  tongji E
WHERE
  E.ROWID=
        (SELECT
            MAX(ROWID)
        FROM
            (SELECT * FROM  tongji A  WHERE A.OPERATETIME=
                 (SELECT MAX(OPERATETIME) FROM tongji B WHERE  B.P_NUMBER=A.P_NUMBER)
            ) C
        WHERE C.P_NUMBER=E.P_NUMBER
        )

解决方案 »

  1.   

    改成这样的试试:
    select
      *
    FROM
      tongji E
    WHERE
      E.ROWID=
            (SELECT
                MAX(ROWID)
            FROM
                (SELECT a.*,row_number() 
                           over(partition by p_number order by OPERATETIME desc) r             
                 FROM  tongji A  
                ) C
            WHERE C.P_NUMBER=E.P_NUMBER and c.r=1
            )
      

  2.   

    应该是:
    select
      *
    FROM
      tongji E
    WHERE
      E.ROWID=
            (SELECT
                MAX(ROWID)
            FROM
                (SELECT a.*,rank() 
                         over(partition by p_number order by OPERATETIME desc) r             
                 FROM  tongji A  
                ) C
            WHERE C.P_NUMBER=E.P_NUMBER and c.r=1
            )
      

  3.   

    不好意思,没用过8.0.5的oracle
      

  4.   

    问题主要出现在子查询中没有选择rowid伪列的原因造成的,添上去应该就可以了,楼主试试:
    select
      *
    FROM
      tongji E
    WHERE
      E.ROWID=
            (SELECT
                MAX(ROWID)
            FROM
                (SELECT rowid,A.* FROM  tongji A  WHERE A.OPERATETIME= --此处添上rowid试试
                     (SELECT MAX(OPERATETIME) FROM tongji B WHERE  B.P_NUMBER=A.P_NUMBER)
                ) C
            WHERE C.P_NUMBER=E.P_NUMBER
            )