+ -
当前位置:首页 → 问答吧 → 关于SQL优化的问题

关于SQL优化的问题

时间:2011-11-29

来源:互联网

SQL code
select DATE
  from (SELECT DATE
          FROM TABLE_EXC
         WHERE OFFE_VAR = 'S1'
           AND DATA_PAR = 3
           AND DATE <= to_date('2011-02-21', 'yyyy-mm-dd')
           AND WEIGH_PRI <> 0
         ORDER BY DATE DESC)
 where rownum = 1;

SQL code
select DATE
  from (SELECT DATE
          FROM TABLE_EXC
         WHERE OFFE_VAR = 'S1'
           AND DATA_PAR = 3
           AND DATE <= to_date('2011-02-22', 'yyyy-mm-dd')
           AND WEIGH_PRI <> 0
         ORDER BY DATE DESC)
 where rownum = 1;

SQL code
select DATE
  from (SELECT DATE
          FROM TABLE_EXC
         WHERE OFFE_VAR = 'S1'
           AND DATA_PAR = 3
           AND DATE <= to_date('2011-02-23', 'yyyy-mm-dd')
           AND WEIGH_PRI <> 0
         ORDER BY DATE DESC)
 where rownum = 1;


 请问怎么把这3条sql整合成一条语句,能求出3个纪录来

作者: yoyoshadow   发布时间: 2011-11-29

SQL code

select t.DATE from TABLE_EXC t
where t.OFFE_VAR = 'S1' AND t.DATA_PAR = 3 and t.WEIGH_PRI <> 0
and not exists(select 1 from TABLE_EXC where trunc(DATE,'dd')=trunc(t.DATE,'dd')
and DATE>t.DATE and OFFE_VAR = 'S1' AND DATA_PAR = 3 and WEIGH_PRI <> 0
)
and t.DATE>=to_date('2011-02-20', 'yyyy-mm-dd') and t.DATE<to_date('2011-02-23', 'yyyy-mm-dd') 

作者: lxpbs8851   发布时间: 2011-11-29

SQL code
union all

作者: cosio   发布时间: 2011-11-29

或者
SQL code

select t.date
from 
(
select DATE,row_number() over(partition by trunc(DATE,'dd') order by DATE desc) as rn
from TABLE_EXC
where FFE_VAR = 'S1' AND DATA_PAR = 3 and WEIGH_PRI <> 0 
and DATE>=to_date('2011-02-20', 'yyyy-mm-dd') and DATE<to_date('2011-02-23', 'yyyy-mm-dd') 
)t
where t.rn=1

作者: lxpbs8851   发布时间: 2011-11-29

引用 2 楼 cosio 的回复:
SQL code
union all

支持2楼
TABLE_EXC只有'2011-02-21'或者还有更加小的日期时 查处的结果是:3条'2011-02-21'
TABLE_EXC只有'2011-02-22'时,其他小于'2011-02-22'的日期时,查处的结果是,2条'2011-02-22',一条是其他小于'2011-02-22'的日期中最大的一条
等等情况……

作者: xpingping   发布时间: 2011-11-29