2013-02-03 2 views
0

두 개의 다른 테이블에서 서로 다른 두 시간의 평균 시간 차이를 선택하는 데 필요한 쿼리가 있습니다.여러 행의 MySQL AVG TimeDiff

다음 질문이 나올 때까지는 쉬운 것처럼 보였습니다. 학생이 사무실에 들어오는 이유를 그룹화해야합니다. 그래서 지금이 쿼리가 필요 :

  1. 는 이유를 선택 학생이 그 이유를 수
  2. 가 그럼 난에서 AVG 시간을 확인해야합니다 (왜)에 대해 올 횟수 (왜)
  3. 카운트 시작 시간. 내가 왜 그룹화했는지 명심해라. 즉, 학생들이 방문하는 이유에 해당하는 모든 기록에 대해 시간차를 계산해야합니다.

    ERROR 1111 (HY000) : 나는 '돈 그룹 기능의 사용이 잘못

    나는 오류가 발생하지만

    SELECT why, 
        count(why), 
        SEC_TO_TIME(AVG(MAX(support.finishtime) - session.signintime)) 
        FROM session 
        LEFT JOIN support 
         ON support.session_id = session.session_id 
        WHERE status = 3 
        GROUP BY why; 
    

    :

나는이 쿼리를 작성 이 문제를 이해하는 것 같습니다. 그들이 사용하는 것을 고려하고있는 과거 질문을 읽는 것에서? 그러나 나는 어떻게 이런 상황에서 where 절을 추가해야 하는지를 이해하지 못한다.

도움을 주시면 감사하겠습니다.

, 나는 당신이 원하는 것은 최대 지원 기록을 얻을 수있는 중첩 된 쿼리이라고 생각하고이 조금 찾고, 당신에게

+0

MAX 기능을 사용해보십시오. 나는 mySQL이 MAX 함수 대신에 MAX 그룹을 사용하려한다고 의심한다. –

+0

각 세션 (왜 그와 연관된가?)은 다중 카운셀러가 있기 때문에 max를 사용해야한다. 그래서 세션의 맨 처음 (signintime)과 타임 스탬프 중 가장 큰 (MAX) finishtime이 끝나기를 바랍니다. – RaGe10940

답변

0
SELECT 
session.why AS Reason, 
COUNT(session.why) AS Count, 
SEC_TO_TIME(AVG(TIMEDIFF(t.fin, session.signintime))) AS Time 
FROM session 
LEFT JOIN (SELECT support.session_id, MAX(support.finishtime) AS fin 
FROM support 
GROUP BY support.session_id) AS t 
    ON session.session_id = t.session_id 
WHERE session.status = 3 
GROUP BY session.why 
ORDER BY session.signintime DESC 

이것은 완벽하게 작동합니다. 몇 시간 전에 얻었습니다. 서브 쿼리를 사용하지 않았기 때문에 교수가 도와주었습니다.

0

확인 감사합니다. 이 작업을 수행하는

한 가지 방법은 다음과 같습니다

SELECT why, 
    count(why), 
    SEC_TO_TIME(AVG((select max(finishtime) from 
       support where support.session_id = session.session_id) - 
     session.signintime)) 
    FROM session 
    WHERE status = 3 
    GROUP BY why; 

난 당신이 내가 사용 된 테이블 구조를 볼 수 있도록 SQL Fiddle를 작성했습니다.

+0

글쎄, 나는 학생이 사무실에 얼마나 있었는지 평균을 받아야한다. finishtime을 선택하는 것은 아무런 문제가되지 않습니다. 문제는 평균과 두 가지의 timediff를 수행해야 할 때입니다. 내가 붙어있는 곳. – RaGe10940

+0

스키마, 일부 데이터 및 예상 결과를 SQLFiddle에 게시 할 수 있습니까? –

관련 문제