MySQL中具有DateTime和动态列的数据透视表

时间:2018-08-02 16:09:23

标签: mysql

有没有一种方法可以在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

列数可能会更改,因此它必须是动态的。

1 个答案:

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

该问题的其余所有方面都可以在应用程序代码中得到最佳解决