使用 TD_WEEK_OF_CALENDAR 时出现 Teradata 3706 错误

Teradata 3706 Error when using TD_WEEK_OF_CALENDAR

我进行了一个每日级别的查询,并尝试使用函数 TD_WEEK_OF_CALENDAR 将其转换为每周一次,它似乎让所有事情都停止工作,我无法完全做到的感觉。这是一个基本示例,请注意,我已经更改了查询,因此它可能看起来像 运行 的奇怪查询,但它很容易显示错误发生的位置。

我得到的错误是,"Query Failed. 3706: Syntax error: expected something between ',' and the 'year' keyword." 但是,子查询 运行 很好,如果我删除它,加入查询 运行 就很好,所以我有点难过.

select a.Customer
    , TD_WEEK_OF_CALENDAR(ab.DateField) as Week
    , z.AvgYearBalance
    , avg(ab.Balance) as WeeklyBalance
from Customer a
left join Balances ab on a.Customer=ab.Customer

left join(
     select a.Customer
         , year(ab.DateField) as Year
         , avg(ab.Balance) as AvgYearBalance
     from Customer a
     left join Balances ab on a.Customer=ab.Customer
     group by 1,2
) z on a.Customer=z.Customer

group by 1,2,3

year 不是 Teradata 中的内置函数。只有较旧的 ODBC 驱动程序具有自动将其转换为有效语法的开关,但自 TD14 以来已弃用并在 TD16 中删除。它只适用于普通选择,不适用于视图等,显然它在派生表中也不支持。只需切换到有效的 Teradata & Stanadard SQL:

extract(year from ab.DateField) as "Year"

顺便说一句,TD16.20 的最新 "Feature Upgrade 1" 重新引入了与连接无关的 UCASE、CONCAT、YEAR 等函数:-)