Bạn muốn tính tổng sự khác biệt giữa các hàng liên tiếp.
Ví dụ:giả sử bạn có các giá trị này cho cột kwh
:
kwh
---
10
12
14
17
25
32
vì vậy sự khác biệt là:
kwh_diff
--------
0
12-10
14-12
17-14
25-17
32-25
Tổng của những khác biệt này bằng 32-10
đó là:
Vì vậy, những gì bạn cần là hàm cửa sổ FIRST_VALUE()
để có được những giá trị này:
SELECT DISTINCT n.`name`, n.`customer_id`, m.`msn`,
FIRST_VALUE(m.kwh) OVER (PARTITION BY n.`customer_id` ORDER BY m.`data_date_time` DESC) -
FIRST_VALUE(m.kwh) OVER (PARTITION BY n.`customer_id` ORDER BY m.`data_date_time` ASC) AS kwh_diff
FROM mdc_node n
INNER JOIN `mdc_meters_data` m ON n.`customer_id` = m.`cust_id`
WHERE n.`lft` = 5 AND n.`icon` NOT IN ('folder')
AND m.`data_date_time` BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
và không cần truy vấn con hoặc tổng hợp.
Tôi đã lưu trong mã của mình PARTITION BY n.customer_id
bởi vì bạn sử dụng nó trong mã của mình, mặc dù bạn có thể cần PARTITION BY n.customer_id, m.msn
.