2013-08-19 5 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) 

둘 사이에는 4sec의 시간차가 있습니다. 어떤 유형의 쿼리를 사용하여 차이 을 계산하고 싶습니다. 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의 보고서 : 당신의 where 절 변화에

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

답변

0

이름을 모두 테이블 동일 열의 사용이 당신 JOIN 두 개의 테이블, 대신 ONUSING 절에 사용할 수있는 경우 :

이 이
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가 먼저 들어 왔지만 필자는 db에 대한 모든 답을 고려할 것입니다. 감사 – cookie

1

WHERE call_id='521243ad953e-965inwuz1gku'; 

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

17,451,515,

또는

문제가되지 않습니다. 당신이 의 차이 모든 번하려면

1

: 하나의 call_id를 들어

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

을, 당신은 필터에 열 이름을 별칭을해야합니다

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

Demo

1

where 절에서 oc.call_id를 시도하십시오.

이 시점에서 값이 일치하지만 sql 파서는 여전히 참조 할 단어를 알아야합니다.

관련 문제