0
我有一個表包含Sql server 2014中的傳感器數據,每個傳感器都有自己的傳感器ID。我想通過計算當前值與基於單個sensorid的logdate減去之前值之間的消耗來計算和設置/更新消耗領域,例如sensorid = 8555.sql server根據第一個較早的記錄設置消耗值
sensorid 8555的當前表結構:
+----------+-------------------------+---------+-------------+
| SensorId | LogDate | Value | Consumption |
+----------+-------------------------+---------+-------------+
| 8555 | 2016-10-03 13:00:00.000 | 0.00000 | Null |
| 2478 | 2016-11-09 09:00:00.000 | 0.00000 | 0.00000 |
| 2478 | 2016-11-09 10:00:00.000 | 0.00000 | 0.00000 |
| 8555 | 2016-10-03 14:00:00.000 | 1.00000 | Null |
| 8555 | 2016-10-03 15:00:00.000 | 1.00000 | Null |
| 8555 | 2016-10-03 16:00:00.000 | 1.00000 | Null |
| 8555 | 2016-10-03 17:00:00.000 | 2.00000 | Null |
| 8555 | 2016-10-03 18:00:00.000 | 2.00000 | Null |
| 8555 | 2016-10-03 19:00:00.000 | 4.00000 | Null |
+----------+-------------------------+---------+-------------+
最終的結果應該是這樣的:
+----------+-------------------------+---------+-------------+
| SensorId | LogDate | Value | Consumption |
+----------+-------------------------+---------+-------------+
| 8555 | 2016-10-03 13:00:00.000 | 0.00000 | 0.00000 |
| 2478 | 2016-11-09 09:00:00.000 | 0.00000 | 0.00000 |
| 2478 | 2016-11-09 10:00:00.000 | 0.00000 | 0.00000 |
| 8555 | 2016-10-03 14:00:00.000 | 1.00000 | 1.00000 |
| 8555 | 2016-10-03 15:00:00.000 | 1.00000 | 0.00000 |
| 8555 | 2016-10-03 16:00:00.000 | 1.00000 | 0.00000 |
| 8555 | 2016-10-03 17:00:00.000 | 2.00000 | 1.00000 |
| 8555 | 2016-10-03 18:00:00.000 | 2.00000 | 0.00000 |
| 8555 | 2016-10-03 19:00:00.000 | 4.00000 | 2.00000 |
+----------+-------------------------+---------+-------------+
我已經沖刷谷歌的解決方案,我只能找到一個版本的答案對於MySQL的,我不知道如何轉換到sql服務器。 我知道update語句應該包含LAG,並且可能使用CTE,但是我還沒有找到關於如何在Web上使用這些語句的簡單解釋。
任何幫助,將不勝感激。
Alfaiz嗨,使用select語句我知道如何計算消費,問題是我想更新表,寫消耗值回表。 – lazylorax
@lazylorax已更新查詢檢查它。 –
嗨阿爾法茲,我做了一個不好的數據表示。我在同一個表中有多個sensorids,並且可以混合rownumbers,例如,可能有50行sensorid 4588,然後是3行8555,然後讓32行sensorid 5948等。這將是一個查詢只更新一個傳感器ID的消耗值?我試着用「WHERE SensorId = 8555查詢,但是這給了我錯誤的值。 – lazylorax