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 |
+---------------------+---------------------+----------+