2013-08-19 37 views
2
mysql> select * from on_connected; 
+----+-----------+-------------+---------------------------+---------------------+ 
| id | extension | destination | call_id     | created_at   | 
+----+-----------+-------------+---------------------------+---------------------+ 
| 11 | 1111111 | 01155555551 | 521243ad953e-965inwuz1gku | 2013-08-19 17:11:53 | 
+----+-----------+-------------+---------------------------+---------------------+ 

mysql> select * from on_disconnected; 
+----+-----------+-------------+---------------------------+---------------------+ 
| id | extension | destination | call_id     | created_at   | 
+----+-----------+-------------+---------------------------+---------------------+ 
| 1 | 1111111 | 01155555551 | 521243ad953e-965inwuz1gku | 2013-08-19 17:11:57 | 
+----+-----------+-------------+---------------------------+---------------------+ 
1 row in set (0.00 sec) 

兩者之間存在4秒的時間差。我想使用某種類型的查詢來計算差異 。我知道TIMEFIFF()和加入,但缺乏在此時形成查詢 的技能。通過比較具有相同列的兩個表獲得結果

這是我嘗試迄今:

SELECT TIMEDIFF(to_seconds(od.created_at), to_seconds(oc.created_at)) 
FROM on_connected oc 
JOIN on_disconnected od 
ON oc.call_id=od.call_id 
WHERE call_id='521243ad953e-965inwuz1gku'; 

MySQL回報:

ERROR 1052 (23000): Column 'call_id' in where clause is ambiguous 

回答

0

當使用他的名字是兩個表中相同列你JOIN兩個表,你可以使用USING條款,而不是ON

SELECT TIMEDIFF(to_seconds(od.created_at), to_seconds(oc.created_at)) 
FROM on_connected oc 
JOIN on_disconnected od 
USING(call_id)        -- eq. to `od.call_id = oc.call_id` 
WHERE call_id='521243ad953e-965inwuz1gku'; -- no need to specify the table name here 

不只是這會節省幾個關鍵斯托克斯,但通過這樣做,您將能夠在不指定表名的情況下引用該列。

+0

一些優秀的回覆,fancyPants首先在那裏,但我會考慮所有的答案考慮我的分貝。謝謝 – cookie

1

在您的where子句變化

WHERE call_id='521243ad953e-965inwuz1gku'; 

WHERE oc.call_id='521243ad953e-965inwuz1gku'; 

WHERE od.call_id='521243ad953e-965inwuz1gku'; 

沒關係。

1

如果你想爲所有倍的差異:

SELECT TIME_TO_SEC(TIMEDIFF(od.created_at, oc.created_at)) 
FROM on_connected oc 
JOIN on_disconnected od ON od.call_id = oc.call_id 

Demo

對於單個call_id,你需要在過濾器別名列名:

WHERE oc.call_id = '521243ad953e-965inwuz1gku' 

Demo

1

嘗試where子句中的oc.call_id。

儘管這些值在此時會匹配,但sql解析器仍然需要知道您指的是哪一個。

相關問題