DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(device INT NOT NULL
,lat DECIMAL(10,6) NOT NULL
,lon DECIMAL(10,6) NOT NULL
,speed DECIMAL(5,2)
,mode INT NOT NULL
,dt DATETIME NOT NULL
,PRIMARY KEY(device,dt)
);
INSERT INTO my_table VALUES
(117,1.415738,103.82360,28.8,3,'2017-07-12 22:07:40'),
(117,1.424894,103.82561,31.9,3,'2017-07-12 22:08:41'),
(117,1.429965,103.82674,10.9,3,'2017-07-12 22:09:47'),
(117,1.430308,103.82873, 5.2,3,'2017-07-12 22:10:47'),
(117,1.430542,103.83278,13.9,3,'2017-07-12 22:11:48'),
(117,1.430537,103.83325, 3.2,3,'2017-07-12 22:12:47');
SELECT x.*
, SEC_TO_TIME(TIME_TO_SEC(x.dt)-TIME_TO_SEC(MAX(y.dt))) diff
FROM my_table x
LEFT
JOIN my_table y
ON y.device = x.device
AND y.dt < x.dt
GROUP
BY x.device
, x.dt;
+--------+----------+------------+-------+------+---------------------+----------+
| device | lat | lon | speed | mode | dt | diff |
+--------+----------+------------+-------+------+---------------------+----------+
| 117 | 1.415738 | 103.823600 | 28.80 | 3 | 2017-07-12 22:07:40 | NULL |
| 117 | 1.424894 | 103.825610 | 31.90 | 3 | 2017-07-12 22:08:41 | 00:01:01 |
| 117 | 1.429965 | 103.826740 | 10.90 | 3 | 2017-07-12 22:09:47 | 00:01:06 |
| 117 | 1.430308 | 103.828730 | 5.20 | 3 | 2017-07-12 22:10:47 | 00:01:00 |
| 117 | 1.430542 | 103.832780 | 13.90 | 3 | 2017-07-12 22:11:48 | 00:01:01 |
| 117 | 1.430537 | 103.833250 | 3.20 | 3 | 2017-07-12 22:12:47 | 00:00:59 |
+--------+----------+------------+-------+------+---------------------+----------+
6 rows in set (0.00 sec)
这似乎有点多余存储这样的事情在一个数据库行。你为什么想这样做? –
我不会将它存储在数据库中,而是在您真正需要时计算它。您可以在数据库端使用https://dev.mysql.com/doc/refman/5.5/zh-CN/date-and-time-functions.html#function_timediff或在PHP中使用DateTime:Diff http:// php .net/manual/de/datetime.diff.php – user1915746
因为我需要知道每行的时差才能进一步计算。 – Achilles