Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL中向下和向上事件之间的时间戳差异,而不是向上和向下事件之间的时间戳差异_Mysql_Sql_Mysql Workbench - Fatal编程技术网

MYSQL中向下和向上事件之间的时间戳差异,而不是向上和向下事件之间的时间戳差异

MYSQL中向下和向上事件之间的时间戳差异,而不是向上和向下事件之间的时间戳差异,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我有一个MYSQL数据库,我想写一个查询,它将以秒为单位返回DOWN和UP事件之间的时差。我只需要上下项目之间的差异,而不需要上下项目之间的差异 以下是我的数据库记录示例: comment date_time type 146 2015-05-20 07:07:34 UP 146 2015-05-20 07:02:32 DOWN 146 2015-05-20 00:03:13 UP 146 2015-05-19 23:57:

我有一个MYSQL数据库,我想写一个查询,它将以秒为单位返回DOWN和UP事件之间的时差。我只需要上下项目之间的差异,而不需要上下项目之间的差异

以下是我的数据库记录示例:

comment       date_time       type
  146   2015-05-20 07:07:34    UP
  146   2015-05-20 07:02:32   DOWN
  146   2015-05-20 00:03:13    UP
  146   2015-05-19 23:57:36   DOWN
因此,因为我只需要向下和向上事件之间的差异,所以
2015-05-20 00:00:00
2015-05-20 12:00:00
之间的差异应该是
00:05:02

我有一个MYSQL查询:

SELECT UP1.comment, sum(timestampdiff(second, DOWN1.date_time, UP1.date_time)) AS down_time_d FROM
(SELECT comment, date_time, type FROM event
    WHERE  comment like '%146%'
    AND event.date_time BETWEEN '2015-05-20 00:00.00' and '2015-05-20 13:23:58'
    AND type = 'SENSOR_UP'
) AS UP1,

(SELECT comment, date_time, type FROM event
    WHERE  comment like '%146%'
    AND event.date_time BETWEEN '2015-05-20 00:00.00' and '2015-05-20 13:23:58'
    AND type = 'SENSOR_DOWN'
) AS DOWN1
WHERE UP1.comment=DOWN1.comment
GROUP BY comment
这个查询的问题是返回DOWN和UP与DOWN之间的差异。返回我的差异是
06:54:17
,而不是我的期望值
00:05:02
。如果有更多的向下和向上记录,那么向下和向上之间所有可能的组合都会有所不同

我应该在我的查询中更改什么,只返回向下和向上事件之间的时差之和


Thanx寻求帮助

我要解释一下你的要求……
-系统关闭的总时间

系统从<代码>下降事件开始下降,直到任何后续事件结束

如果随后的事件也是一个
下降
,它只是继续下降

如果没有后续事件,系统将保持关闭状态,直到“现在”


您不能将表结构修改为包含
senser\u up date\u time、sensor\u down date\u time
列吗?因此,每个事件在同一记录中都有
向上
向下
时间!!我的想法是一样的,但是我想添加第四列up_down_event_id,它将链接两个up_down记录。问题是,这肯定有简化的余地。当然,事件id应该设置。这个数据源是如何组织的?例如,事件顺序是否可以是向上、向上、向下、向下、向上?应该如何满足这些需求呢?这样的解决方案会很好,而且会大大简化事情,但数据库结构就是这样,不可能改变任何东西。所以我需要用这类数据找到一个解。查找ID是不可能的,因为有更多的注释类型(146、145、144、143等),并且它们都有向下和向上事件。所以ID1000代表commetn 146,ID1001代表145,ID1002代表146…没有键将ID与注释或日期时间连接起来。ID只是事件的随机数,无论该事件属于哪种注释类型。一定有办法用这些数据来解决这个问题?首先我感谢你的回答。我实际解决了系统在午夜和上下之间停机的问题,现在是PHP。这里我只需要事件下降和上升之间的时间差(以秒为单位)。
SELECT
    comment,
    SUM(down_time)
FROM
(
    SELECT
        down_event.comment,
        TIMESTAMPDIFF(
            second,
            down_event.date_time,
            COALESCE(
                MIN(next_event.date_time),
                '2015-05-20 13:23:58'
            )
        )       AS down_time
    FROM
        event   down_event
    LEFT JOIN
        event   next_event
            ON  next_event.comment      =    down_event.comment
            AND next_event.date_time    >    down_event.date_time
            AND next_event.date_time BETWEEN '2015-05-20 00:00.00'
                                       AND   '2015-05-20 13:23:58'
    WHERE
            down_event.type         =    'DOWN'
        AND down_event.date_time BETWEEN '2015-05-20 00:00.00'
                                   AND   '2015-05-20 13:23:58'
    GROUP BY
        down_event.comment,
        down_event.date_time
)
    AS down_time
GROUP BY
    comment
;