2013-10-30 3 views
0

두 개의 테이블 featuresresponses이 있는데, 각 기능에 대해 여러 응답이있을 수 있습니다 (또는 응답이 없을 수도 있음). 응답 테이블은 시간 소인을 포함하는 beganended 열을가집니다 (적어도 시작된 시간 소인이 있고 끝은 NULL 일 수 있음).관련 테이블의 TIMESTAMPDIFF AVG 가져 오기?

features (해당하는 경우)의 요약 세부 정보가있는 목록을 추출하려고합니다. 내가 응답없이 기능을 포함하려면 responses 테이블에서 GROUP BY를 사용하지 않습니다.

이것은 내가 시도하는 SQL이지만 TIMESTAMPDIFF 절 근처에서 SQL 구문 오류를보고하고 있습니다.

SELECT f.id, f.name, f.description, is_active, 
    (SELECT COUNT(r.id) FROM responses r 
    LEFT JOIN participants p ON r.id_participant = p.id 
    WHERE p.is_ignored IS NULL 
    AND r.is_deleted IS NULL 
    AND r.id_feature = f.id 
    AND r.result IS NULL) AS nr_s, 

    (SELECT COUNT(r.id) FROM responses r 
    LEFT JOIN participants p ON r.id_participant = p.id 
    WHERE p.is_ignored IS NULL 
    AND r.is_deleted IS NULL 
    AND r.id_feature = f.id) AS nr_r, 

    (SELECT SUM(r.is_D) FROM responses r 
    LEFT JOIN participants p ON r.id_participant = p.id 
    WHERE p.is_ignored IS NULL 
    AND r.is_deleted IS NULL 
    AND r.id_feature = f.id) AS is_D, 

    (SELECT AVG(TIMESTAMPDIFF(SECONDS,r.began,r.ended)) FROM responses r 
    LEFT JOIN participants p ON r.id_participant = p.id 
    WHERE p.is_ignored IS NULL 
    AND r.is_deleted IS NULL 
    AND r.id_feature = f.id) AS duration 

FROM features f 
WHERE f.is_deleted IS NULL AND f.id_survey=44 
ORDER BY f.id ASC 

내가 뭘 잘못하고 있니?

+0

_ "가? 내가 무슨 일을하고있는 중이 야"_ - 당신이 우리에게 당신이 점점 _what_ 오류 ... – CBroe

+0

# 1064를 이야기하지 않는 - 당신은 당신의 SQL 구문에 오류가 있습니다; 'SECONDS, r.began, r.ended) 근처에서 사용할 올바른 구문에 대해서는 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.) FROM responses r LEFT JOIN 참여자 p ON r.id'on line 21 – Erics

답변

0

SECONDS은 유효하지 않습니다. unit. 당신은 SECOND 원하는 :

SELECT f.id, f.name, f.description, is_active, 
    (SELECT COUNT(r.id) FROM responses r 
    LEFT JOIN participants p ON r.id_participant = p.id 
    WHERE p.is_ignored IS NULL 
    AND r.is_deleted IS NULL 
    AND r.id_feature = f.id 
    AND r.result IS NULL) AS nr_s, 

    (SELECT COUNT(r.id) FROM responses r 
    LEFT JOIN participants p ON r.id_participant = p.id 
    WHERE p.is_ignored IS NULL 
    AND r.is_deleted IS NULL 
    AND r.id_feature = f.id) AS nr_r, 

    (SELECT SUM(r.is_D) FROM responses r 
    LEFT JOIN participants p ON r.id_participant = p.id 
    WHERE p.is_ignored IS NULL 
    AND r.is_deleted IS NULL 
    AND r.id_feature = f.id) AS is_D, 

    (SELECT AVG(TIMESTAMPDIFF(SECOND,r.began,r.ended)) FROM responses r 
    LEFT JOIN participants p ON r.id_participant = p.id 
    WHERE p.is_ignored IS NULL 
    AND r.is_deleted IS NULL 
    AND r.id_feature = f.id) AS duration 

FROM features f 
WHERE f.is_deleted IS NULL AND f.id_survey=44 
ORDER BY f.id ASC 
+0

Oh wow. 그거야 =) – Erics