使用 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 等函数:-)
我进行了一个每日级别的查询,并尝试使用函数 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 等函数:-)