两个日期之间的最大日期teradata

时间:2017-01-27 14:51:43

标签: sqlite date sas max teradata

我正在运行以下proc sql来提取最大日期。

Proc sql;
   Connect to TERADATA (login details);
   Create table dates as 
   Select * from connection to TERADATA
  ( select max (date1,'2011-12-31') from table1
);
Quit;

Error:
Syntax error: expected something between the word      'date1' and ','

在我做错的地方有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

在大多数SQL中,max函数是一个聚合函数,它只接受一个参数然后获取列(或传递给它的任何内容)并从该列中选择最大值。

SAS的不同之处在于它使max重载也可用作行级功能。

要做到这一点,你可以这样做:

Proc sql;
   Connect to TERADATA (login details);
   Create table dates as 
   Select max(date1,'2011-12-31') from connection to TERADATA
  ( select date1 from table1
);
Quit;

将其从teradata中删除并进入SAS,这样做是合法的。

答案 1 :(得分:0)

如果您使用GREATEST函数并将日期转换为INTEGER,则可以使用Teradata在数据库中进行下推(下推优化):

Proc sql;
   Connect to TERADATA (login details);
   Create table dates as 
   Select * from connection to TERADATA
  ( select GREATEST (CAST(date1 AS INTEGER), CAST(CAST('2011-12-31' AS DATE) AS INTEGER)) from table1
);
Quit;

注意:我将第二个参数双重转换为安全方,即使它以隐式ANSI日期格式传递给Teradata。如果您的日期在表格中可以为空(date1),则COALESCE可能存在一些障碍。