【发布时间】:2018-08-17 21:22:56
【问题描述】:
我有一个场景以分钟计算时间戳的差异。 2 个表中有一个公共字段,即 dw_job_id 并想加入2个表并猜测,计算
(scratch.COGIPF_RUNREPORT_test2.end_ts - concat(proct_dt, scratch.dw_job_sla_dim_test.sla_time)
例如,分钟减法:
(2018-03-05 01:53:14.201000 - 2018-03-05 08:00:00.000000)= -366
使用以下记录会很清楚:
第一个查询有 end_ts:
sel * from scratch.COGIPF_RUNREPORT_test2 where dw_job_id=1226
结果:
dw_job_id proct_dt start_ts end_ts time_diff dw_job_status_id
1,226 2018-03-05 00:00:00 2018-03-05 01:50:23 2018-03-05 01:53:14.201000 3 12
1,226 2018-03-06 00:00:00 2018-03-06 01:42:56 2018-03-06 01:45:23.553000 3 12
第二次查询:
select * from scratch.dw_job_sla_dim_test where dw_job_id=1226
结果:
dw_job_id sla_hour sla_minute sla_time
1,226 8 0 08:00:00.000000
最终结果应该是:
dw_job_id run_date start_timestamp end_timestamp runtime_minutes sla_miss_minutes
1,226 3/5/2018 3/5/2018 01:50:23.000000 3/5/2018 01:53:14.201000 2 -366
1,226 3/6/2018 3/6/2018 01:42:56.000000 3/6/2018 01:45:23.553000 2 -374
例子:
分钟减法:-(2018-03-05 01:53:14.201000 - 2018-03-05 08:00:00.000000)= -366
数据类型:
sla_hour INTEGER,
sla_minute INTEGER,
sla_time TIME(6),
end_ts VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC,
【问题讨论】:
-
cast(start_ts as time)提取时间部分,现在加入 SLA 表,cast(start_ts as time) - sla_time minute(4)返回差异 -
尝试这个:- 从头开始选择演员(a.end_ts 作为时间)- sla_time 分钟(4)。COGIPF_RUNREPORT_test2 a 左外连接 scratch.dw_job_sla_dim_test b on b.dw_job_id=a.dw_job_id 其中 a。 dw_job_id=1226 ;但获得无效时间
-
@dnoeth 上面一个是错误的查询.. 因为它在 sla_time 之前没有 2018-03-05
-
嗨,有没有关于这个..的提示?请看一次
-
根据您的示例
sla_time是TIME,因此差异计算应该有效,确切的错误消息是什么?sla_time不需要日期部分,因为start_ts和sla_time都来自同一日期。
标签: datetime timestamp left-join teradata teradata-sql-assistant