mysql中带有datetime和动态列的pivot表

bnlyeluc  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(267)

有没有办法在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

列的数量可能会改变,所以它必须是动态的。

x4shl7ld

x4shl7ld1#

考虑以下几点:

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

问题的任何剩余方面最好在应用程序代码中解决

相关问题