如下表所示,在继续计算告警3开始触发和告警结束触发的持续时间之前,需要按照相同的日期和相同的站点进行过滤,条件是告警3之后始终是告警6,且告警3和告警6的开始时间间隔必须始终在60秒以内。
site | alarm | start | end
-----| ------| --------------------| -------------------
A | 3 | 2020-01-03 22:25:16 | 2020-01-03 22:25:46
A | 6 | 2020-01-03 22:25:26 | 2020-01-03 22:35:26
A | 5 | 2020-01-03 10:25:16 | 2020-01-03 10:26:26
A | 3 | 2020-01-03 12:25:16 | 2020-01-03 12:26:26
B | 3 | 2020-01-04 22:22:16 | 2020-01-04 22:22:59
B | 6 | 2020-01-04 22:22:40 | 2020-01-04 22:25:26 我希望得到下面的结果表,
site | alarm | start | end | duration(seconds)
-----| ------| --------------------| --------------------| --------
A | 3 | 2020-01-03 22:25:16 | 2020-01-03 22:25:46 | 30
A | 6 | 2020-01-03 22:25:26 | 2020-01-03 22:35:26 |
B | 3 | 2020-01-04 22:22:16 | 2020-01-04 22:22:59 | 43
B | 6 | 2020-01-04 22:22:40 | 2020-01-04 22:25:26 | 发布于 2020-09-04 16:56:47
试试这个..。这可能会解决这个问题:)
SELECT * FROM MyTab T WHERE TIMESTAMPDIFF(MINUTE,open_date,close_date) > 1发布于 2020-09-04 17:39:15
尝尝这个。用您的表名替换报警
SELECT
site,
alarm,
start,
end,
CASE
WHEN TIMESTAMPDIFF(SECOND, START, END) <= 60 THEN TIMESTAMPDIFF(SECOND, START, END)
ELSE NULL
END AS duration
FROM
Alarms
WHERE
alarm IN (3 , 6)
ORDER BY site,alarm;https://stackoverflow.com/questions/63737873
复制相似问题