我在mysql中有一个表,其中包含以下列
order
---------------------
id integer
order_id integer
status integer
time-stamp timestamp
我需要找到表中两行的时间戳之间的区别,其中order_id对于两行都是相同的,而一行的状态是2,而另一行的状态是4。
我尝试通过不同的sql函数,但尚未成功。
答案 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'
像魅力一样工作。