0

我想优化以下查询,不使用子查询来获取最大值:

select c.ida2a2 from table1 m, table2 c 
where c.ida3a5 = m.ida2a2 
and (c.createstampa2 < (select max(cc.createstampa2) 
                        from table2 cc where cc.ida3a5 = c.ida3a5));

任何的想法?如果您想获得更多信息,请告诉我。

4

1 回答 1

3

这可能是编写查询的更有效方式:

select c.ida2a2
from table1 m join
     (select c.*, MAX(createstampa2) over (partition by ida3a5) as maxcs
      from table2 c 
     ) c
     on c.ida3a5 = m.ida2a2
where c.createstampa2 < maxcs

我很确定 Oracle 会正确优化这一点(在连接之前过滤行)。如果你想更清楚:

select c.ida2a2
from table1 m join
     (select c.*
      from (select c.*, MAX(createstampa2) over (partition by ida3a5) as maxcs
            from table2 c 
           ) c
      where c.createstamp2 < c.maxcs
     ) c
     on c.ida3a5 = m.ida2a2
于 2013-02-08T16:47:58.727 回答