计算 MySQL 中的消耗:减去前一行值,按 SN 分组
本指南演示如何通过比较 MySQL 表中每个 SN
组内的连续值来计算消耗。 数据包括 SN
(序列号)和 Value
列,代表一段时间内的测量值。 目标是通过从当前值减去前一个值来计算每个 SN
的消耗。
这是一个利用用户定义变量来实现此目的的 MySQL 查询:
<code class="language-sql">SELECT EL.SN, EL.Date, EL.Value, IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00) AS Consumption, @lastSN := EL.SN, @lastValue := EL.Value FROM EnergyLog EL, (SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars ORDER BY EL.SN, EL.Date;</code>
查询说明:
变量初始化:子查询(SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars
将用户定义的变量@lastSN
(跟踪前一个SN
)和@lastValue
(跟踪前一个Value
)初始化为NULL
。 使用 NULL
而不是 0 可以正确处理每个 SN
组的第一行。
逐行处理: 主查询迭代 EnergyLog
表(别名为 EL
),按 SN
和 Date
排序。
消耗计算: IF
语句检查当前的 SN
(EL.SN
) 是否与之前处理的 SN
(@lastSN
) 匹配。
EL.Value - @lastValue
。SN
组),则会将消耗设置为 0.00。变量更新: @lastSN := EL.SN
和 @lastValue := EL.Value
更新下一行比较的变量。
输出: 查询返回每行的 SN
、Date
、Value
和计算的 Consumption
。
此方法使用单个查询有效地计算每个 SN
组内的消耗,从而消除了对更复杂的子查询或联接的需要。 使用用户定义的变量使计算简洁且高效。
以上是如何通过减去 MySQL 中按 SN 分组的前一行值来计算消耗?的详细内容。更多信息请关注PHP中文网其他相关文章!