5

クエリを更新しましたが、次のエラーが発生します。SQL構文にエラーがあります。7行目の「ASmax_parameter_valueFROMtcs.parameter_values_archieve」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

    SELECT sum(max_pv) SUM_MAX,
       sum(min_pv) SUM_MIN,
       sum(max_pv) - sum(min_pv) DIFF
  FROM (SELECT t.parameter_value, t.created_date, t.meter_id, parameter_id
          FROM tcs.parameter_values_archieve t
         INNER JOIN (SELECT meter_id,
                           MAX(parameter_value) max_pv AS max_parameter_value
                      FROM tcs.parameter_values_archieve
                     where created_date like '2013-01-01%'
                       and created_date <= '2013-01-01 20:00:00'
                       and meter_id between 1 and 16
                       and parameter_id = 1
                     GROUP BY meter_id) q ON t.meter_id = q.meter_id
                                         AND t.parameter_value =
                                             q.max_parameter_value) MAX_TBL,
       (SELECT t.parameter_value, t.created_date, t.meter_id, parameter_id
          FROM tcs.parameter_values_archieve t
         INNER JOIN (SELECT meter_id,
                           MIN(parameter_value) min_pv AS max_parameter_value
                      FROM tcs.parameter_values_archieve
                     where created_date like '2013-01-01%'
                       and created_date >= '2013-01-01 20:00:00'
                       and meter_id between 1 and 16
                       and parameter_id = 1
                     GROUP BY meter_id) q ON t.meter_id = q.meter_id
                                         AND t.parameter_value =
                                             q.max_parameter_value) MIN_TBL;

これは、最大値を見つけるために私が書いたクエリです。今、私はすべてを合計する必要がありmax(parameter_value)ます。同様に、min(parameter_value)forを見つけて、created_date like '2013-01-01%' and created_date >='2013-01-01 08:00:00'これら2つの値を減算する必要があります。

それを行う方法は?私はmysqlを使用しています。

follのように合計を個別に見つけた場合、合計を取得しますが、「select sum(min_parameter_value)」を実行すると、フィールド不明のエラーがスローされます。この合計は正しいですか?疑問がありますか?

SELECT sum(parameter_value) from

(SELECT t.parameter_value,t.created_date,t.meter_id,parameter_id
    FROM tcs.parameter_values_archieve t
        INNER JOIN (SELECT meter_id, min(parameter_value) AS min_parameter_value
                        FROM tcs.parameter_values_archieve where created_date like'2013-01-07%'and created_date >='2013-01-07 08:00:00'and meter_id between 1 and 16 and parameter_id =1
                        GROUP BY meter_id) q
            ON t.meter_id = q.meter_id
                AND t.parameter_value = q.min_parameter_value)min_tbl;
4

2 に答える 2

4

これを試して、

SELECT sum(max_pv) SUM_MAX,
       sum(min_pv) SUM_MIN,
       sum(max_pv) - sum(min_pv) DIFF
  FROM (SELECT t.parameter_value, t.created_date, t.meter_id, parameter_id
          FROM tcs.parameter_values_archieve t
         INNER JOIN (SELECT meter_id,
                           MAX(parameter_value) max_pv AS max_parameter_value
                      FROM tcs.parameter_values_archieve
                     where created_date like '2013-01-01%'
                       and created_date <= '2013-01-01 20:00:00'
                       and meter_id between 1 and 16
                       and parameter_id = 1
                     GROUP BY meter_id) q ON t.meter_id = q.meter_id
                                         AND t.parameter_value =
                                             q.max_parameter_value) MAX_TBL,
       (SELECT t.parameter_value, t.created_date, t.meter_id, parameter_id
          FROM tcs.parameter_values_archieve t
         INNER JOIN (SELECT meter_id,
                           MIN(parameter_value) min_pv AS max_parameter_value
                      FROM tcs.parameter_values_archieve
                     where created_date like '2013-01-01%'
                       and created_date >= '2013-01-01 20:00:00'
                       and meter_id between 1 and 16
                       and parameter_id = 1
                     GROUP BY meter_id) q ON t.meter_id = q.meter_id
                                         AND t.parameter_value =
                                             q.max_parameter_value) MIN_TBL;
于 2013-01-11T05:55:53.340 に答える
3
SELECT SUM(CASE WHEN t.parameter_value = q.max_parameter_value THEN t.parameter_value END), 
       SUM(CASE WHEN t.parameter_value = q.min_parameter_value THEN t.parameter_value END),
       SUM(CASE WHEN t.parameter_value = q.max_parameter_value THEN t.parameter_value END) - 
       SUM(CASE WHEN t.parameter_value = q.min_parameter_value THEN t.parameter_value END) AS substract
FROM tcs.parameter_values_archieve t INNER JOIN
 (SELECT meter_id, MAX(CASE WHEN created_date <= '2013-01-01 20:00:00' THEN parameter_value END) AS max_parameter_value, 
                   MIN(CASE WHEN created_date >= '2013-01-01 08:00:00' THEN parameter_value END) AS min_parameter_value 
  FROM  parameter_values_archieve
  WHERE created_date like '2013-01-01%' and meter_id between 1 and 16 and parameter_id = 1
  GROUP BY meter_id) q ON t.meter_id = q.meter_id

簡単な例SQLFiddle

于 2013-01-11T08:01:09.977 に答える