我想从mysql查询中获得这种结果:
名称|问日期|授予日期|持续时间
乔| 2016-07-01 10:02:01 | 2016-07-01 10:02:05 | 10
本| 2016-07-01 10:04:24 | 2016-07-01 10:04:26 | 12
...
每个条目都存储在一个如下所示的表中:
id | action_date | action_type | unique_instance | name
12 | 2016-07-01 10:02:01 | Asked | 6546532161654 | Joe
13 | 2016-07-01 10:02:06 | Granted | 6546532161654 | Joe
14 | 2016-07-01 10:05:12 | Asked | 6546532161654 | Ben
15 | 2016-07-01 10:05:15 | Granted | 6546532161654 | Ben
16 | 2016-07-01 10:06:06 | Finished | 6546532161654 | Joe
我尝试过这样的查询,但它没有奏效:
Select table.name as Name,
table.action_date as Asked,
g.action_date as Granted,
TIMESTAMPDIFF(SECOND, g.action_date, q.action_date) as Duration
FROM table
LEFT JOIN table g ON table.unique_instance = g.unique_instance AND g.action_type = 'Granted'
LEFT JOIN table q ON table.unique_instance = q.unique_instance AND q.action_type = 'Finished'
WHERE table.action_type = 'Asked'
AND table.unique_instance = '6546532161654'
GROUP BY table.action_date;
答案 0 :(得分:0)
如评论中所述。
您的数据库设计似乎不正确,因为您甚至没有使用您的ID。 您无法识别哪条记录是唯一的并且与哪些记录相关,但您仍然可以使用该名称,但它不是唯一的,因为将来您将继续使用相同名称的记录。
我的建议是将action_type和ID作为主键。这样,您始终可以使用相同的ID并相应地更改action_type。
示例(请注意,您不能包含多于1条记录):
为了调试代码,此查询应该只返回1条记录:
select * from table where unique_instance = '6546532161654' AND action_type = 'Granted'
但是因为unique_instance毕竟不是唯一的,所以它会抓住其他不需要的数据。
注意:您的查询是正确的。