【发布时间】:2019-04-16 06:58:46
【问题描述】:
我有一个包含日期列的表格
我还需要选择此列我需要选择不驻留在数据库中的上一个日期 如果存在或当前数据
我尝试了以下查询
select hst1.QUERYID,hst1.starttime,
ZEROIFNULL(hst2.starttime) as delta
from dbqlogtbl_dba_hst hst1
left outer join dbqlogtbl_dba_hst hst2 on
hst1.QUERYID = hst2.QUERYID;
我在获取结果时遇到错误
【问题讨论】:
-
这个错误可能是由
zeroifnull引起的,它只为数字数据定义,而不是时间戳。您应该改用coalesce(hst2.starttime, current_time(0))。而且它不会起作用,因为 QueryID 是唯一的。但是 Gordon 基于 OLAP 函数的回答通常是非常有效的。lag最近已实现(16.10+),在您可以使用max(starttime) over (partition by queryid order by starttime rows between 1 preceding and 1 preceding)重写之前。顺便说一句,已经有一个QryLogV.LastRespTime... -
starttime 实际上是 Timestamp(6) 类型,执行此查询时出错。作为单个语句执行。失败 [3800 : HY000] THEN/ELSE 表达式中的数据类型不匹配。
-
对不起,必须是
current_timeSTAMP(0) -
使用 SELECT STARTTIME, MAX(STARTTIME) OVER (PARTITION BY 1 ORDER BY STARTTIME DESC ROWS BETWEEN 1 PRECEDING 和 1 PRECEDING) 作为 DBQLOGTBL 的 ENDTIME 来解决这个问题
标签: sql teradata teradata-sql-assistant