Presto- получить разницу во времени - PullRequest
0 голосов
/ 17 ноября 2018

Я новичок в PrestoDB и хочу написать запрос, который будет сравнивать две метки времени, первая строка строки будет сравниваться с ближайшей следующей строкой даты, и если разница больше 15 минут, она напечатает эту строку. Я написал ниже запрос, но при его выполнении выдает ошибку: msgstr "неожиданный параметр (временная метка с часовым поясом) для функции 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;

sample output

До сих пор не установлен критерий фильтрации для печати только тех строк, где разница больше 15 минут, и я также хочу добавить +10: 00 к отметке времени при выполнении сравнения. Ищу некоторую помощь в этом отношении. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 декабря 2018

Столбец met_date не соответствует формату, который ищет is_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
...