有没有一种方法可以在MySQL中实现?
我有这个样本表,主键只是一个相关数字:
LotNumber DateTime Location
ABC 07/31/2018 8AM Start
ABC 07/31/2018 10AM A
ABC 07/31/2018 2PM B
ABC 07/31/2018 5PM C
ABC 07/31/2018 9PM Finished
客户的生产过程可变,其中物品在不同的位置开始和结束。我想知道什么时候开始,什么时候结束,以及它在不同建筑物中待多久。
结果应如下所示:
LotNumber Started Finished TimeInStart A B C
ABC 07/31/2018 8AM 07/31/2018 9PM 2H 4H 3H 3H
列数可能会更改,因此它必须是动态的。
答案 0 :(得分:1)
请考虑以下内容:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,dt DATETIME NOT NULL
,location CHAR(1) NOT NULL
);
INSERT INTO my_table VALUES
(1,'2018-07-31 08:00:00','A'),
(2,'2018-07-31 10:00:00','X'),
(3,'2018-07-31 14:00:00','Y'),
(4,'2018-07-31 17:00:00','Z'),
(5,'2018-07-31 21:00:00','B');
SELECT x.*
, TIMEDIFF(MIN(y.dt),x.dt) diff
FROM my_table x
LEFT
JOIN my_table y ON y.dt > x.dt
GROUP
BY x.id;
+----+---------------------+----------+----------+
| id | dt | location | diff |
+----+---------------------+----------+----------+
| 1 | 2018-07-31 08:00:00 | A | 02:00:00 |
| 2 | 2018-07-31 10:00:00 | X | 04:00:00 |
| 3 | 2018-07-31 14:00:00 | Y | 03:00:00 |
| 4 | 2018-07-31 17:00:00 | Z | 04:00:00 |
| 5 | 2018-07-31 21:00:00 | B | NULL |
+----+---------------------+----------+----------+
该问题的其余所有方面都可以在应用程序代码中得到最佳解决