首页 >数据库 >mysql教程 >如何通过减去 MySQL 中按 SN 分组的前一行值来计算消耗?

如何通过减去 MySQL 中按 SN 分组的前一行值来计算消耗?

Patricia Arquette
Patricia Arquette原创
2025-01-10 11:41:42120浏览

How to Calculate Consumption by Subtracting Previous Row Values in MySQL, Grouped by SN?

计算 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>

查询说明:

  1. 变量初始化:子查询(SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars将用户定义的变量@lastSN(跟踪前一个SN)和@lastValue(跟踪前一个Value)初始化为NULL。 使用 NULL 而不是 0 可以正确处理每个 SN 组的第一行。

  2. 逐行处理: 主查询迭代 EnergyLog 表(别名为 EL),按 SNDate 排序。

  3. 消耗计算: IF 语句检查当前的 SN (EL.SN) 是否与之前处理的 SN (@lastSN) 匹配。

    • 如果它们匹配,则将消耗计算为EL.Value - @lastValue
    • 如果它们不匹配(意味着一个新的 SN 组),则会将消耗设置为 0.00。
  4. 变量更新: @lastSN := EL.SN@lastValue := EL.Value 更新下一行比较的变量。

  5. 输出: 查询返回每行的 SNDateValue 和计算的 Consumption

此方法使用单个查询有效地计算每个 SN 组内的消耗,从而消除了对更复杂的子查询或联接的需要。 使用用户定义的变量使计算简洁且高效。

以上是如何通过减去 MySQL 中按 SN 分组的前一行值来计算消耗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn