Сводная таблица в MySQL с DateTime и динамическими столбцами

0

есть ли способ достичь этого в 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
    Хорошо, я только что отредактировал, спасибо. Первичный ключ - это просто соответствующее число.
  • 0
    Хорошо, нет проблем.
Теги:

1 ответ

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

Любые оставшиеся аспекты проблемы лучше всего разрешены в коде приложения

  • 0
    Это то, что я подумал, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню