> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 이전 행에서 빼서 소비 값을 계산하는 방법은 무엇입니까?

MySQL의 이전 행에서 빼서 소비 값을 계산하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-10 12:01:43
원래의
550명이 탐색했습니다.

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으로 초기화합니다.
  • 쿼리는 EnergyLog 테이블을 원하는 순서(SN 및 날짜 기준)로 반복합니다.
  • 현재 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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿