根据不同的where条件在select查询中获取两个值并减去它们

时间:2018-01-15 04:36:30

标签: mysql

我有一张看起来像这样的桌子。相同的id1可以包含多个具有不同操作值的行。但是,对于一个id1,可以有一个'open'和一个'merged'值(并非所有id1都有一个'merged'值,但每个id都保证'open'值)

id_1    id2 id3     action      time                ext_id    
8131201 2   345886  opened      2012-01-19 00:24:55 5099318b1b66c0d7b200000c
8510820 2   345886  merge       2012-01-26 09:20:17 5099318b1b66c0d7b200000d

对于那些具有“合并”值的id1,我希望得到它在打开时和在单个查询中合并时的时间差。怎么可能呢?

1 个答案:

答案 0 :(得分:1)

您可以使用自我加入来执行此操作:

SELECT t.id_1, TIMEDIFF(t.time, t2.time) AS time_difference
FROM t
INNER JOIN t t2 ON t.id_1 = t2.id_1
WHERE t.action = 'opened'
AND t2.action = 'merge

所以基本上将表连接到id 1,其中第一个记录打开,第二个记录合并。然后使用TIMEDIFF找到每个表副本的时间差异。