0

と の 2 つのテーブルがfeaturesありresponses、各機能に対して複数の回答がある場合があります (または回答がない場合もあります)。応答テーブルには、タイムスタンプを含むbeganandended列があります (少なくとも開始タイムスタンプがあり、終了タイムスタンプは NULL の場合があります)。

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

私は何を間違っていますか?

4

1 に答える 1

0

SECONDSは有効な単位ではありません。あなたがしたい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
于 2013-10-30T09:37:07.790 に答える