我有一个方案来计算时间戳的分钟差异。在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,
答案 0 :(得分:0)
我过去曾使用过以下逻辑。但我认为你追求的是什么。
,(CAST((CAST(end_timestamp AS DATE)- CAST(start_timestamp AS DATE)) AS DECIMAL(18,6)) * 60*24)
+ ((EXTRACT( HOUR FROM end_timestamp) - EXTRACT( HOUR FROM start_timestamp))* 60)
+ ((EXTRACT(MINUTE FROM end_timestamp) - EXTRACT(MINUTE FROM start_timestamp)) )
+ ((EXTRACT(SECOND FROM end_timestamp) - EXTRACT(SECOND FROM start_timestamp))/60)
AS "Difference in Minutes"
对于其他人,我将包括我的小时和秒计算
,(CAST((CAST(end_timestamp AS DATE)- CAST(start_timestamp AS DATE)) AS DECIMAL(18,6)) * 60*60*24)
+ ((EXTRACT( HOUR FROM end_timestamp) - EXTRACT( HOUR FROM start_timestamp))* 60*60)
+ ((EXTRACT(MINUTE FROM end_timestamp) - EXTRACT(MINUTE FROM start_timestamp)) * 60)
+ ((EXTRACT(SECOND FROM end_timestamp) - EXTRACT(SECOND FROM start_timestamp)))
AS "Difference in Seconds"
,(CAST((CAST(end_timestamp AS DATE)- CAST(start_timestamp AS DATE)) AS DECIMAL(18,6)) * 24)
+ ((EXTRACT( HOUR FROM end_timestamp) - EXTRACT( HOUR FROM start_timestamp)))
+ ((EXTRACT(MINUTE FROM end_timestamp) - EXTRACT(MINUTE FROM start_timestamp)) / 60.000000)
+ ((EXTRACT(SECOND FROM end_timestamp) - EXTRACT(SECOND FROM start_timestamp)) / 3600.000000)
AS "Difference In Hours"