暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从Oracle中的表中获取日期过滤器?

ASKTOM 2021-01-13
472

问题描述

我想知道如何从表中访问日期列,并将其用作另一个大容量表的日期过滤器。

我有以下查询,该查询当前在过滤条件中使用日期,并且在大约10到15分钟内完成。

select a,b,datec, sum(c) from table1 where datec = date '2021-01-12' group by a,b,datec


我正在尝试用另一个名为table2的表中的日期替换硬编码日期。这是一个小表,有1600行,只返回最新的周期完成日期 (一个值),通常是今天的日期减去一天,除了周期不运行的假期以外的大多数日子。table1是一个视图,它返回数百万行。

我尝试了以下查询,以便在过滤器条件中获取日期值:

select a,b,datec, sum(c) from table1 t1, table2 t2 where t1.datec = t2.pdate and t2.prcnm = 'TC' group by a,b,datec

select a,b,datec, sum(c) from table1 t1 inner join table2 t2 on datec = t2.pdate and t2.prcnm = 'TC' group by a,b,datec

select a,b,datec, sum(c) from table1 t1 where t1.datec = (SELECT t2.date FROM table2 t2 WHERE prcnm = 'TC') group by a,b,datec


我也试过这个提示:

select a,b,datec, sum(c) from table1 t1 where t1.datec = (SELECT /*+ PRECOMPUTE_SUBQUERY */ t2.date FROM table2 t2 WHERE prcnm = 'TC') group by a,b,datec


上述查询花费的时间太长,最终失败,并显示此错误消息-“并行查询服务器意外死亡”

当我使用table2中的日期时,我什至无法返回10行。我确认table2只返回一个日期,而不是多个日期。

您能否帮助我理解为什么使用硬编码日期时查询有效,但使用另一个表中的日期时不起作用?

谢谢。

专家解答

没有所有细节很难知道,但也许可以尝试一下:

with single_date as
(  
  SELECT /*+ MATERIALIZE */ t2.date FROM table2 t2 WHERE prcnm = 'TC'
)
select /*+ leading( s, t1) */ 
a,b,datec, sum(c) 
from table1 t1 , single_date s
where t1.datec = s.date


如果这不起作用,请在评论中回复我们,我们将探索其他选择
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论