我是PrestoDB的新手,想编写一个查询来比较两个时间戳, 第一行的日期将与紧接的下一个日期的行进行比较,如果相差大于15分钟,则它将打印该行。 我在下面编写了查询,但是在执行查询时会抛出错误: “功能from_iso8601_timestamp的意外参数(带时区的时间戳)”。
SELECT mt.logical_name, mt.cable_name, mt.dt, mt.met_date,
date_diff('second', from_iso8601_timestamp(met_date),
lag(from_iso8601_timestamp(met_date)) over (order by met_date))
FROM MyTable mt
where mt.dt = 20181117 and mt.cable_name = 'cable' and mt.logical_name ='ABCD0000008'
ORDER BY mt.met_date;
到现在为止,还没有放置任何过滤条件来仅打印差异大于15分钟的那些行,并且我还想在进行比较时在时间戳上加上+10:00。 在这方面寻求帮助。 任何帮助将不胜感激。
答案 0 :(得分:1)
met_date列的格式不是from_iso8601_timestamp正在寻找的格式。:
“ 2018-11-07 00:05:00”应为“ 2018-11-07T00:05:00”。
作为快速解决方案,您可以将from_iso8601_timestamp(met_date)替换为from_iso8601_timestamp(replace(met_date,'','T'))
然后从提供的初始查询中选择
SELECT
logical_name, cable_name, date_add('minute', 10, met_date) as met_date, time_difference
FROM (
SELECT mt.logical_name, mt.cable_name, mt.dt, mt.met_date,
date_diff('second', met_date,
lag(met_date) over (order by met_date)) AS
time_difference
FROM (
SELECT mt.logical_name, mt.cable_name, mt.dt,
from_iso8601_timestamp(replace(met_date, ' ', 'T')) as met_date
FROM MyTable mt
where mt.dt = 20181117 and mt.cable_name = 'cable' and mt.logical_name
='ABCD0000008'
)
)
WHERE time_difference >= 15
ORDER BY met_date DESC