【问题标题】:Filter Data for 30 months using subquery with INTERVAL function in Teradata在 Teradata 中使用具有 INTERVAL 函数的子查询过滤 30 个月的数据
【发布时间】:2023-03-09 19:41:01
【问题描述】:

我想在区间函数中使用子查询过滤掉数据

以下是我使用的查询

SEL * FROM my_table WHERE MY_DATE < CURRENT_DATE- INTERVAL '30' MONTH;

上述查询有效,但是我想使用子查询参数化周期“30”。请建议如何实现这一目标。

提前致谢

【问题讨论】:

  • 这里的参数化是什么意思?用户应该提示输入值?为什么需要子查询?
  • 我认为 Teradata 不会允许您使用子查询来执行此操作(除了子查询会给您一个结果集,而不是单个值)。我认为您需要创建一个存储过程才能执行此类操作。我见过先构造查询然后运行它的存储过程。不幸的是,我不知道它是如何完成的。
  • 我记得它使用了一个查询,它整理了许多字符串来最终进行输出查询,例如“SELECT 'SELECT * FROM my_table WHERE MY_DATE

标签: sql subquery teradata intervals


【解决方案1】:

不要对年/月使用间隔计算,因为它会失败,例如DATE '2016-12-31' + INTERVAL '30' MONTH 导致 2019-06-31(根据标准 SQL)显然不存在。

SELECT * 
FROM my_table 
WHERE MY_DATE < ADD_MONTHS(CURRENT_DATE, (SELECT -col FROM tab));

如果 col 实际上是一个 INTERVAL,则需要将其转换为 INT。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2018-10-30
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多