将表中的两行合并为特定条件

时间:2015-05-09 10:21:55

标签: mysql sql

我在mysql中有一个表,其中包含以下列

order
---------------------
id integer 
order_id integer 
status integer
time-stamp timestamp

我需要找到表中两行的时间戳之间的区别,其中order_id对于两行都是相同的,而一行的状态是2,而另一行的状态是4。

我尝试通过不同的sql函数,但尚未成功。

3 个答案:

答案 0 :(得分:0)

进行自我加入,例如:

select t1.*, t2.*, t2.timestamp - t1.timestamp
from tablename t1
  join tablename t2 ON t1.order_id = t2.order_id
where t1.status = 2
  and t2.status = 4

我不太了解MySQL,所以t2.timestamp - t1.timestamp部分可能需要调整。

答案 1 :(得分:0)

执行此操作的一种方法是使用自联接(即,将表连接到自身)并使用timestampdiff function来获得所需粒度的差异:

SELECT TIMESTAMPDIFF(SECOND, a.`time-stamp`, b.`time-stamp`)
FROM `order` a 
JOIN `order` b ON a.order_id = b.order_id
WHERE a.status = 2 
  AND b.status = 4

这假设order_id和status的每个组合只有一个匹配的行。如果可以有多个,则需要选择要以某种方式进行比较的特定行。

答案 2 :(得分:0)

我使用了这个查询

SELECT ,SUBSTRING_INDEX(group_concat(timestamp separator ','),',',1)  
as time1, SUBSTRING_INDEX(group_concat(timestamp separator ,'),',',-1)
as time2, group_concat(status separator ',') as stat,COUNT() as cont 
FROM order_log ol WHERE (ol.status = 2 OR ol.status = 4) GROUP BY 
ol.order_id HAVING COUNT(*) = 2 AND stat='2,4'

像魅力一样工作。