尝试在报告的几天内排除子集

时间:2017-06-14 15:51:43

标签: sql oracle

我试图排除某种类型的交易,如果它们少于4天但是这个过滤器即时使用在返回结果时非常慢。它也没有捕获预定于10月13日到期的10月交易的交易。如果我修改它以包括这些,它还将包括在同一个月内少于4天的交易。有人可以帮助我提高效率并捕捉我想要的东西。使用orcale sql developer

    and ( DC.M_TYPOLOGY <> 'Repo BD' OR (DC.M_TYPOLOGY ='Repo BD' and 
(((to_char( DC.M_OPTMAT , 'YYYY')- to_char (DC.M_TRADEDATE, 'YYYY'))= 0 
and (to_char( DC.M_OPTMAT , 'MM')- to_char (DC.M_TRADEDATE, 'MM') < 1))
 and (to_char( DC.M_OPTMAT , 'DD')- to_char (DC.M_TRADEDATE, 'DD') > 4))))

1 个答案:

答案 0 :(得分:0)

所有转换都是不必要的(而且错误 - 当交易跨越年末时会发生什么?)。我们可以使用Oracle日期算术,所以这是相同的:

( DC.M_TYPOLOGY <> 'Repo BD' 
   OR (DC.M_TYPOLOGY ='Repo BD' 
   and DC.M_TRADEDATE - DC.M_OPTMAT < 4 )
)

注意:此答案在最近编辑问题之前发布。我将其留在原地,但是一旦OP澄清了他们想要执行的规则,我将对其进行修改。

当然,这可能无法加快您的查询速度。性能问题可能源于许多不同的原因,并且根本没有提供足够的细节。