[英]mysql subtract two rows from column and places into an alias
我的表meter_readings
包含列: id
, date_taken
, kwh
。
我正在嘗試將kwh
列中的兩行相減,然后將結果放入一個名為consumption
的別名中。
我正在使用:
SELECT id, kwh COALESCE(kwh-(SELECT kwh FROM meter_readings WHERE id= id+1), kwh) AS consumption
FROM meter_readings;
我所得到的消耗別名很簡單,與原始kwh
相同:
id date_taken kwh consumption
1 2013-01-01 4567.89 4567.89
2 2013-01-08 4596.71 4596.71
3 2013-01-15 4607.89 4607.89
我想要的是:
id date_taken kwh consumption
1 2013-01-01 4567.89 0
2 2013-01-08 4596.71 28.11
3 2013-01-15 4607.89 11.18
所以id 1 = 0,因為這是第一個date_taken kwh讀數,因此不需要消耗值。 這試圖計算一年中每周的千瓦時消耗量。
只需為表名指定一個別名,然后在相關子查詢中為表指定一個不同的別名即可。 像這樣:
SELECT
m1.id,
m1.kwh,
COALESCE(m1.kwh - (SELECT m2.kwh
FROM meter_readings AS m2
WHERE m2.id = m1.id + 1),
m1.kwh) AS consumption
FROM meter_readings AS m1;
這將為您提供:
| ID | KWH | CONSUMPTION |
------------------------------
| 1 | 4567.89 | 1141.18 |
| 2 | 3426.71 | 1181.37 |
| 3 | 2245.34 | 2245.34 |
對於更新的樣本數據,只需在具有COALESCE(..., 0)
的相關子查詢中使用WHERE m2.id = m1.id - 1
COALESCE(..., 0)
以便第一個為0。像這樣:
SELECT
m1.id,
date_format(m1.date_taken, '%Y-%m-%d') AS date_taken,
m1.kwh,
COALESCE(m1.kwh - (SELECT m2.kwh
FROM meter_readings m2
WHERE m2.id = m1.id - 1), 0) AS consumption
FROM meter_readings m1;
這將為您提供:
| ID | DATE_TAKEN | KWH | CONSUMPTION |
-------------------------------------------
| 1 | 2013-01-01 | 4567.89 | 0 |
| 2 | 2013-01-08 | 4596.71 | 28.82 |
| 3 | 2013-01-15 | 4607.89 | 11.18 |
COALESCE返回第一個非null值,因此您必須在不使用COALESCE的情況下嘗試執行此查詢,然后看看問題出在哪里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.