есть ли способ достичь этого в 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
Количество столбцов может меняться, поэтому оно должно быть динамическим.
Рассмотрим следующее:
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 |
+----+---------------------+----------+----------+
Любые оставшиеся аспекты проблемы лучше всего разрешены в коде приложения