sql - 预获取时间戳差异
问题描述
我是 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。在这方面寻求一些帮助。任何帮助将不胜感激。
解决方案
列 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
推荐阅读
- google-apps-script - 我可以根据一个或多个单词来分隔列中的文本吗?
- activemq - Prometheus 和 ActiveMQ 集成
- python - 在字符串中查找 char 的索引
- javascript - 如何使用 Javascript 显示图形
- powershell - 如何在单行中连接调用表达式和变量
- wso2 - WSO2 Enterprise Integrator (6.5.0) 集群与负载均衡器
- angular - 如何在每行内使用 ngFor 选择具有三个单选按钮的单选按钮
- protractor - info 生命周期量角器-typescript-cucumber@4.0.0~test: 执行测试脚本失败
- python-3.x - 使用jinja2在html中查询数据库
- entity-framework - 如何使用 EF Core 中的连接表映射具有“自层次”关系的实体