Teradata:在间隔参数中使用列引用
Teradata : Using Column reference in the Interval Parameter
我有一个查询有问题,我想给日期加上一个区间,区间参数是我的table.
中某列的值
我的table是这样的
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 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
我有一个查询有问题,我想给日期加上一个区间,区间参数是我的table.
中某列的值我的table是这样的
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 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