これは、システム内の異なるセンサーを参照する 3 つの異なる「アドレス」から毎日の値を収集するために使用しているクエリです。
SELECT DISTINCT
LEFT(changes.date_time, 6) AS 'date',
changes.address AS 'address',
(CASE WHEN changes.address IN (18) THEN - MAX(changes.value * types.multiplier) ELSE MAX(changes.value * types.multiplier) END) AS 'value'
FROM sensor.changes
INNER JOIN sensor.types ON changes.type = types.idx
WHERE
changes.address IN (1, 4, 8)
AND changes.date_time >= '12110100000000'
AND changes.date_time <= '13050100000000'
GROUP BY LEFT(changes.date_time, 6),
changes.address
ORDER BY changes.idx;
最初の日付には次の値が含まれ、その後の日付には同じアドレスが含まれます。
date address value
130203 1 0.0160
130203 4 0.1220
130203 8 -0.0070
これら 3 つの値、住所 1+4+8 を、その日付の 1 つの行に結合したいと考えています。「値」列で SUM を試みましたが、SQL エラーが発生しました: #1111 - Invalid use of group function
。2 番目の GROUP BY 列を取り出すと、日付ごとに 1 つの値になりますが、値はそれらの値の合計ではありません。2 番目のクエリを使用して結果をフォーマットしても問題ありませんが、データベース サーバーがローカルではないため、最初のクエリで計算を行った方がよいでしょう。
編集:結果として必要なものを明確にするために:
date address value
130203 1 0.131
この場合、列の下の整数address
は重要ではありません。