首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同行同列多条件减去datetime的MySQL查询

不同行同列多条件减去datetime的MySQL查询
EN

Stack Overflow用户
提问于 2020-09-04 16:50:20
回答 2查看 89关注 0票数 0

如下表所示,在继续计算告警3开始触发和告警结束触发的持续时间之前,需要按照相同的日期和相同的站点进行过滤,条件是告警3之后始终是告警6,且告警3和告警6的开始时间间隔必须始终在60秒以内。

代码语言:javascript
运行
复制
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  

我希望得到下面的结果表,

代码语言:javascript
运行
复制
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 |  
EN

回答 2

Stack Overflow用户

发布于 2020-09-04 16:56:47

试试这个..。这可能会解决这个问题:)

代码语言:javascript
运行
复制
SELECT * FROM MyTab T WHERE TIMESTAMPDIFF(MINUTE,open_date,close_date) > 1
票数 0
EN

Stack Overflow用户

发布于 2020-09-04 17:39:15

尝尝这个。用您的表名替换报警

代码语言:javascript
运行
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63737873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档