Sql 声明Varchar-Teradata

Sql 声明Varchar-Teradata,sql,teradata,Sql,Teradata,我正试图将查询结果保存到声明的varchar,但我收到错误消息“子查询中不能为top n” 试试这个 DECLARE d TIMESTAMP(6); SELECT t1.DATE_S INTO d FROM (SELECT DATE_S, ROW_NUMBER() OVER (ORDER BY ID DESC) rn FROM db1_SC.LOG_SP_STATUS WHERE SP_ID = 1 AND Status IS NULL AND Date_S IS

我正试图将查询结果保存到声明的varchar,但我收到错误消息“子查询中不能为top n”

试试这个

DECLARE d TIMESTAMP(6);

SELECT t1.DATE_S INTO d 
FROM
    (SELECT DATE_S,  ROW_NUMBER() OVER (ORDER BY ID DESC) rn
    FROM db1_SC.LOG_SP_STATUS 
    WHERE SP_ID = 1 AND Status IS NULL AND Date_S IS NOT NULL AND DATE_E IS NULL) t1
WHERE t1.rn = 1

我没有TD系统要测试,但你可以试试

声明d时间戳(6);
选择d中的前1个日期
从db1_SC.LOG_SP_状态
其中SP_ID=1
并且状态为空
并且日期不为空
日期为空
按ID描述订购;

Teradata显然不支持这种语法。可能您也可以使用
从db1_SC.LOG_SP_STATUS中选择d中的前1个日期,其中SP_ID=1,STATUS为NULL,DATE_S为NOT NULL,DATE_E为NULL,ORDER BY ID DESC
,但我不想创建NOT nessery tmp表。您是否试图在存储过程中执行此操作?您只能在Teradata中的存储过程(我认为还有宏)中声明变量。你到底想做什么?我想不出任何合理的理由来避免使用易变表,但如果您真的不想要,请使用CTE。
DECLARE d TIMESTAMP(6);

SELECT t1.DATE_S INTO d 
FROM
    (SELECT DATE_S,  ROW_NUMBER() OVER (ORDER BY ID DESC) rn
    FROM db1_SC.LOG_SP_STATUS 
    WHERE SP_ID = 1 AND Status IS NULL AND Date_S IS NOT NULL AND DATE_E IS NULL) t1
WHERE t1.rn = 1