以下是我用來從三個不同「地址」中收集每日值的查詢,這些地址引用了系統中的不同傳感器。格式化SQL結果作爲總和
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
我想這三個值結合起來,地址1 + 4 + 8,成單列的那個日期。我已經在「值」列上嘗試了一個SUM,但是這會導致SQL錯誤:#1111 - Invalid use of group function
。取出第二個GROUP BY列會導致每個日期有一個值,但該值不是這些值的總和。使用第二個查詢來格式化結果是可以的,但我更喜歡數學是否在第一個查詢中完成,因爲數據庫服務器不是本地的。
編輯:澄清什麼,我需要的結果是:
date address value
130203 1 0.131
在這種情況下,address
列下的整數無所謂。
'value'是什麼?你的輸出應該是什麼樣子? (提示:_只是添加一個「GROUP BY日期」,儘管MySQL會允許你) –
謝謝,我已經添加了期望的結果。幾乎所有的查詢都使用第一個「GROUP BY」列,因爲每天每個地址實際上有很多值。 –