问题描述
我想知道如何从表中访问日期列,并将其用作另一个大容量表的日期过滤器。
我有以下查询,该查询当前在过滤条件中使用日期,并且在大约10到15分钟内完成。
我正在尝试用另一个名为table2的表中的日期替换硬编码日期。这是一个小表,有1600行,只返回最新的周期完成日期 (一个值),通常是今天的日期减去一天,除了周期不运行的假期以外的大多数日子。table1是一个视图,它返回数百万行。
我尝试了以下查询,以便在过滤器条件中获取日期值:
我也试过这个提示:
上述查询花费的时间太长,最终失败,并显示此错误消息-“并行查询服务器意外死亡”
当我使用table2中的日期时,我什至无法返回10行。我确认table2只返回一个日期,而不是多个日期。
您能否帮助我理解为什么使用硬编码日期时查询有效,但使用另一个表中的日期时不起作用?
谢谢。
我有以下查询,该查询当前在过滤条件中使用日期,并且在大约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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




