Mysql 根据条件计算事件的总时间

Mysql 根据条件计算事件的总时间,mysql,Mysql,我有一张桌子 CREATE TABLE log ( id INT NOT NULL AUTO_INCREMENT, keyNo VARCHAR(16), date DATE NOT NULL, time TIME NOT NULL, t1Event VARCHAR(255), t2Event VARCHAR(255), PRIMARY KEY (id) ) 我有以下方式的表行 1 205 2018-07

我有一张桌子

CREATE TABLE log (  
     id INT NOT NULL AUTO_INCREMENT,  
     keyNo VARCHAR(16),  
     date DATE NOT NULL,
     time TIME NOT NULL,
     t1Event VARCHAR(255),
     t2Event VARCHAR(255),  
     PRIMARY KEY  (id)  
)
我有以下方式的表行

1 205 2018-07-10 12:01 Lclosed keyout
2 205 2018-07-10 12:02 Lclosed keyout
3 205 2018-07-10 12:03 Lclosed keyinside
4 205 2018-07-10 12:44 Lclosed keyout
5 205 2018-07-10 13:02 Lclosed keyinside
这个表是我在执行以下查询后得到的

Select * from reportsuser where keyNo = '205' and date = '2018-07-10' and t1Event='Lclosed'

否我想计算钥匙拔出的总时间,可通过第一次
钥匙拔出
事件和第一次
钥匙拔出
事件后的第一次
钥匙插入
来计算。像这样,我想通过将所有这些时间差相加来计算总时间,例如,在上面的例子中,我想要
(3-1)+(5-4)
,用
sno
表示。如何实现这个mysql查询?由于此类查询的时间段可以是月或年,最好的方法是什么?

给我们两个记录示例数据,以便我们更好地了解数据。不是查询的结果集。。我们完全错过了
keyind
事件。。有些人给我们提供了一个ascii数据表(文本格式),其中包含基于示例数据的预期结果。为避免混淆,这是特定
key=205
date=2018-07-10
的实际数据集
keyinside
是钥匙到达储物柜内部时发生的事件的名称,`keyout`是钥匙从储物柜中取出时发生的事件。我想计算第一个键出和第一个内部键之间的时间差,之后它会以类似的方式重复。您可以使用running total来获得这个经过的时间,随后的键出时间差被添加到计数器中,而内部键的时间差被减去。关于MySQL中的运行总计(或累计总和),这里有很多问题。提示:将日期和时间作为一个单独的实体存储由于一些限制,我不能这样做,因此我将不得不将日期和时间作为单独的实体
CREATE TABLE log (  
     id INT NOT NULL AUTO_INCREMENT,  
     dt DATETIME NOT NULL,
     status VARCHAR(255),  
     PRIMARY KEY  (id)  
);

INSERT INTO log VALUES
(1, '2018-07-10 12:01:00' ,'keyout'),
(2, '2018-07-10 12:02:00' ,'keyout'),
(3, '2018-07-10 12:03:00' ,'keyinside'),
(4, '2018-07-10 12:44:00' ,'keyout'),
(5, '2018-07-10 13:02:00' ,'keyinside');


SELECT MIN(dt) dto 
     , dti
     , SEC_TO_TIME(TIME_TO_SEC(dti)-TIME_TO_SEC(MIN(dt))) diff
  FROM 
     (  SELECT x.dt
             , MIN(y.dt) dti
          FROM log x
          JOIN log y ON y.dt > x.dt 
           AND y.status = 'keyinside'
         WHERE x.status = 'keyout'
         GROUP 
            BY x.dt
     ) a
 GROUP
    BY dti;

    +---------------------+---------------------+----------+
    | dto                 | dti                 | diff     |
    +---------------------+---------------------+----------+
    | 2018-07-10 12:01:00 | 2018-07-10 12:03:00 | 00:02:00 |
    | 2018-07-10 12:44:00 | 2018-07-10 13:02:00 | 00:18:00 |
    +---------------------+---------------------+----------+