首页 > 数据库 > mysql教程 > MySQL中如何通过上一行减去来计算消耗值?

MySQL中如何通过上一行减去来计算消耗值?

Patricia Arquette
发布: 2025-01-10 12:01:43
原创
578 人浏览过

How to Calculate Consumption Values by Subtracting from the Previous Row in MySQL?

MySQL中按组计算消耗值:基于前一行的差值

在MySQL中,根据分组因子计算连续值之间的差值是很常见的任务。假设需要根据前一个值计算每个序列号(SN)的消耗值。

数据结构:

示例数据包含EnergyLog表,其模式如下:

<code>SN | 日期 | 值</code>
登录后复制

预期结果:

目标是扩展表,添加“消耗”列,该列表示每个SN相对于前一行的“值”的差值。

解决方案:

MySQL变量提供了一种方便的方法来实现这一点。通过使用用户定义的变量(@lastSN@lastValue),我们可以在迭代数据时跟踪前一个SN和值。

<code class="language-sql">-- 声明变量
SELECT
  EL.SN,
  EL.日期,
  EL.值,
  IF(@lastSN = EL.SN, EL.值 - @lastValue, 0.00) AS 消耗,
  @lastSN := EL.SN,
  @lastValue := EL.值
-- 来自表
FROM EnergyLog EL,
  (SELECT @lastSN := 0, @lastValue := 0) AS SQLVars
-- 按分组因子SN和日期排序
ORDER BY
  EL.SN,
  EL.日期;</code>
登录后复制

解释:

  • FROM子句声明变量(@lastSN@lastValue)并将它们初始化为0。
  • 查询按所需顺序(按SN和日期)迭代EnergyLog表。
  • 它将当前SN与@lastSN进行比较。如果匹配,则计算当前值与前一个@lastValue之间的消耗(差值)。
  • 如果SN不同,则假定一个新组并将消耗重置为0。
  • @lastSN@lastValue变量将更新到下一个迭代。

输出:

SN 日期 消耗
2380 2012-10-30 21.01 0.00
2380 2012-10-31 22.04 1.03
2380 2012-11-01 22.65 0.61
2380 2012-11-02 23.11 0.46
20100 2012-10-30 35.21 0.00
20100 2012-10-31 37.07 1.86
20100 2012-11-01 38.17 1.10
20100 2012-11-02 38.97 0.80
20103 2012-10-30 57.98 0.00
20103 2012-10-31 60.83 2.85

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板