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 및 날짜 기준)로 반복합니다. @lastSN
과 비교합니다. 일치하는 것이 있으면 현재 값과 이전 값의 소비(차이)를 계산합니다@lastValue
. @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 중국어 웹사이트의 기타 관련 기사를 참조하세요!