我有一個表在MySQL結合兩排它具有以下列表中的特定條件
order
---------------------
id integer
order_id integer
status integer
time-stamp timestamp
我需要找到表中的兩行的時間戳之間的區別在哪裏ORDER_ID是相同的一行中的行和狀態都是2,另一行的狀態是4。
我試圖通過不同的SQL函數,但尚未成功。
我有一個表在MySQL結合兩排它具有以下列表中的特定條件
order
---------------------
id integer
order_id integer
status integer
time-stamp timestamp
我需要找到表中的兩行的時間戳之間的區別在哪裏ORDER_ID是相同的一行中的行和狀態都是2,另一行的狀態是4。
我試圖通過不同的SQL函數,但尚未成功。
我用這個查詢
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'
工作就像一個魅力。
只是出於好奇而問,但這應該如何告訴你不同行之間的區別? – jpw
做一個自我聯接,即是這樣的:
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
部分可能需要調整。要做到這一點
一種方法是使用一個自連接(即與自身聯接表),並使用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組合只會有一個匹配的行。如果可以有多個,你需要選擇特定的行進行比較。
那麼你有沒有機會嘗試答案,看看他們中的任何一個是否工作? – jpw
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
我使用了這個查詢,它像一個魅力。 – user3651854