在 Teradata 中创建截至当前日期的时间戳 table

Create a Timestamp table till current date in Teradata

我想创建一个视图,其中包含截至当前日期的所有时间戳以及增量小时,并将其保存为 teradata 中的视图。我该怎么做。我看到了一些使用递归的方法,但没有帮助。

date_x
1/1/2021 0:00
1/1/2021 1:00
1/1/2021 2:00
1/1/2021 3:00
1/1/2021 4:00
CREATE VIEW db1.table1 WITH RECURSIVE DateRanges(CALENDAR_DATE) AS
(
SELECT DATE '2020-01-01' AS CALENDAR_DATE
FROM
( SELECT * FROM 
(SELECT NULL AS X)X) DUMMYTABLE
UNION ALL
SELECT
CALENDAR_DATE + INTERVAL '1' DAY
FROM
DateRanges
WHERE
CALENDAR_DATE < CURRENT_DATE
)
SELECT *
FROM DateRanges;

对于大量级别,递归不是很有效。但是还有 Teradata 鲜为人知的 NORMALIZE 语法:

REPLACE VIEW DateRanges AS
SELECT BEGIN(pd) AS TS
EXPAND ON PERIOD(CAST(DATE '2021-04-01' AS TIMESTAMP(0))
                ,CAST(TRUNC(CURRENT_TIMESTAMP(0)) AS TIMESTAMP(0))) AS pd
          BY INTERVAL '1' HOUR

通常 EXPAND ON 仅在 FROM 中访问 table 时有效,但应用 TRUNC 函数似乎忘记了此规则:-)

如果解析器仍然抱怨从中丢失,您可以使用任何 select 返回单行。我更喜欢 sys_calendar 因为有 public 访问权限:

SELECT BEGIN(pd) AS TS
FROM sys_calendar.calendar
WHERE calendar_date = current_date
EXPAND ON PERIOD(CAST(DATE '2021-04-01' AS TIMESTAMP(0))
                ,CAST(CURRENT_DATE AS TIMESTAMP(0))) AS pd
          BY INTERVAL '1' HOUR