【问题标题】:Teradata : Using Column reference in the Interval ParameterTeradata:在间隔参数中使用列引用
【发布时间】:2020-03-01 01:30:02
【问题描述】:

我有一个查询问题,我想给一个日期加一个区间,而区间参数是我表中某列的值。

我的桌子是这样的

DATE_       | STEP
2019-10-01   10
2019-11-01   30

此查询失败:

SELECT 
,BEGIN(EXPD) AS DH_STEP
,DATE_
FROM MY_TABLE
EXPAND ON PERIOD(CAST( DATE_ || ' 00:00:00' AS TIMESTAMP(0)), CAST(DATE_|| ' 00:00:00' AS TIMESTAMP(0)) + INTERVAL '1' DAY)
EXPD BY INTERVAL STEP MINUTE;

实际上,如果我将STEP替换为'10',则查询成功。

谢谢。

【问题讨论】:

  • 试试BY step * INTERVAL '1' MINUTE

标签: sql teradata


【解决方案1】:

BY INTERVAL 必须是硬编码值。您可以编写一个解决方法,首先为每分钟创建一个间隔,然后根据步骤进行过滤:

SELECT 
   Begin(EXPD) AS DH_STEP,
   DATE_
FROM
 (
   SELECT EXPD, step
     ,DATE_
   FROM MY_TABLE
   EXPAND ON PERIOD(Cast( DATE_ AS TIMESTAMP(0)), Cast(DATE_ +1 AS TIMESTAMP(0))) AS EXPD 
   -- if step is always a multiple of 10 you can reduce the number of rows using `10`minute
   BY INTERVAL '1' MINUTE
 ) AS dt
WHERE Cast((dh_step - Cast( DATE_ AS TIMESTAMP(0)) Minute(4)) AS INT) MOD step = 0

【讨论】:

  • 当您说BY INTERVAL must be a hard-coded value 时,它是否特定于与expand 一起使用时? Gordon 的建议适用于日期/时间数学。
  • 是的,它只是 EXPANDBY INTERVAL 选项。
  • 它工作正常!谢谢!步长始终是 10 的倍数
猜你喜欢
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多