2015-05-09 53 views
-2

我有一個表在MySQL結合兩排它具有以下列表中的特定條件

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

我需要找到表中的兩行的時間戳之間的區別在哪裏ORDER_ID是相同的一行中的行和狀態都是2,另一行的狀態是4。

我試圖通過不同的SQL函數,但尚未成功。

+0

那麼你有沒有機會嘗試答案,看看他們中的任何一個是否工作? – jpw

+0

SELECT *,SUBSTRING_INDEX(GROUP_CONCAT(時間戳分離器 ' '),', '1)作爲TIME1, SUBSTRING_INDEX(GROUP_CONCAT(時間戳分離器', '),',', - 1),時間2, GROUP_CONCAT(狀態(*)= 2,AND stat ='2,4')作爲stat,COUNT(*)作爲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 ' – user3651854

+0

我使用了這個查詢,它像一個魅力。 – user3651854

回答

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' 

工作就像一個魅力。

+0

只是出於好奇而問,但這應該如何告訴你不同行之間的區別? – jpw

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部分可能需要調整。要做到這一點

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組合只會有一個匹配的行。如果可以有多個,你需要選擇特定的行進行比較。