下面是我的问题。
SELECT n.`name`,n.`customer_id`,m.`msn`, m.kwh,
m.kwh - LAG(m.kwh) OVER(PARTITION BY n.`customer_id` ORDER BY m.`data_date_time`) 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()
结果如下
我想总结一下 kwh_diff
只显示一行记录,而不是下面的多行记录
name customer_id msn sum_kwh_diff Zeeshan 37010114711 4A60193390663 4.5
我试着做了以下几件事
SUM(m.kwh - LAG(m.kwh) OVER(PARTITION BY n.`customer_id` ORDER BY m.`data_date_time`)) AS sum_kwh_diff
得到了 Error Code: 4074 Window functions can not be used as arguments to group functions.
3条答案
按热度按时间8wtpewkr1#
您希望对连续行之间的差异求和。
例如,假设列具有这些值
kwh
:所以区别在于:
这些差异之和等于
32-10
即:最后一个值和第一个值之间的差异
所以你需要的是窗口函数
FIRST_VALUE()
要获得这些值:而且不需要子查询或聚合。
我把密码记在里面了
PARTITION BY n.customer_id
因为您在代码中使用它,尽管您可能需要PARTITION BY n.customer_id, m.msn
.70gysomp2#
不能在聚合函数中使用窗口函数(反之亦然),此处需要使用子查询,并在外部查询中聚合:
k5hmc34c3#
进行外部查询