gpt4 book ai didi

mysql - 如何在 MySQL 中编写带有 2 个表的计算查询?

转载 作者:行者123 更新时间:2023-11-29 13:41:12 26 4
gpt4 key购买 nike

我有 2 tbls,如下。

请求表格

id | request | created
1 | asdf | 2013-07-04 14:39:03
2 | qwer | 2013-07-10 12:06:37

历史表

id | request_id | status       | date
1 | 1 | Pending | 2013-07-04 14:39:03
2 | 1 | Reviewing | 2013-07-05 01:10:14
3 | 1 | Implementing | 2013-07-06 11:25:54
4 | 1 | Completed | 2013-07-07 12:36:32
5 | 2 | Pending | 2013-07-10 15:05:56
6 | 2 | Reviewing | 2013-07-11 03:08:04
7 | 2 | Implementing | 2013-07-13 11:45:48
8 | 2 | Completed | 2013-07-17 14:28:15

我想显示以上 2 tbls,如下

Request | Reviewing Time | Implementing Time 
asdf | 0 | 0
qwer | 1 | 2

以 request_id = 1 为例的理论是

reviewing to implementing = (2013-08-06) - (2013-08-05) = 1 day

pending to reviewing = (2013-08-05) - (2013-08-04) = 1 day

Reviewing Time = (reviewing to implementing) - (pending to reviewing) = 0 day

reviewing to implementing = (2013-08-06) - (2013-08-05) = 1 day

implementing to completed = (2013-08-07) - (2013-08-06) = 1 day

Implementing Time = (implementing to compeleted) - (reviewing to implementing) = 0

最佳答案

这里有一个解决这个问题的长期方法......

 CREATE TABLE my_table 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,request_id INT NOT NULL
,status VARCHAR(20) NOT NULL
,date DATETIME NOT NULL
,UNIQUE(request_id,status)
);

INSERT INTO my_table VALUES
(1 ,1 ,'Pending','2013-07-04 14:39:03'),
(2 , 1 ,'Reviewing','2013-07-05 01:10:14'),
(3 , 1 ,'Implementing','2013-07-06 11:25:54'),
(4 , 1 ,'Completed','2013-07-07 12:36:32'),
(5 , 2 ,'Pending','2013-07-10 15:05:56'),
(6 , 2 ,'Reviewing','2013-07-11 03:08:04'),
(7 , 2 ,'Implementing','2013-07-13 11:45:48'),
(8 , 2 ,'Completed','2013-07-17 14:28:15');

SELECT request_id
, DATEDIFF(implementing,reviewing) - DATEDIFF(reviewing,pending) rT
, DATEDIFF(completed,implementing) - DATEDIFF(implementing,reviewing) iT
FROM (
SELECT x.request_id
, MAX(CASE WHEN status = 'pending' THEN date END) pending
, MAX(CASE WHEN status = 'reviewing' THEN date END) reviewing
, MAX(CASE WHEN status = 'implementing' THEN date END) implementing
, MAX(CASE WHEN status = 'completed' THEN date END) completed
FROM my_table x
GROUP
BY request_id
) a;

+------------+------+------+
| request_id | rT | iT |
+------------+------+------+
| 1 | 0 | 0 |
| 2 | 1 | 2 |
+------------+------+------+

相同的sqlfiddle:http://www.sqlfiddle.com/#!2/fc6db/1

关于mysql - 如何在 MySQL 中编写带有 2 个表的计算查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18055035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com