source

이전 행의 값을 기준으로 MariaDB에서 새 값 계산

itover 2023. 6. 6. 11:01
반응형

이전 행의 값을 기준으로 MariaDB에서 새 값 계산

MariaDB 10.3에는 다음과 같은 테이블이 있습니다.

이드 날짜.
1 2020-01-01 120
1 2020-02-01 130
1 2020-03-01 140
1 2020-04-01 150
1 2020-05-01 160
1 2020-06-01 170

저는 모든 날짜 이후에 남은 금액을 계산해야 합니다.이런 거.MariaDB에서 쿼리로 발생할 계산이 필요합니다.

이드 날짜. 지급 전 잔여 총액
1 2020-01-01 120 870
1 2020-02-01 130 750
1 2020-03-01 140 620
1 2020-04-01 150 480
1 2020-05-01 160 330
1 2020-06-01 170 170

몇 가지 긴밀한 해결책을 찾았지만 필요에 따라 적절한 방법으로 변경할 수 없습니다.어떤 아이디어든 감사하겠습니다.

마지막 열의 논리는 다음과 같습니다.

  1. 첫 번째 값은 총계(120+130+140...)입니다.
  2. 모든 다음 값은 동일한 행의 합계 열의 값만큼 감소한 값으로부터 계산됩니다.
  • 870-120=750;
  • 750-130=620;
  • 620-140=304 등

제 시도는 다음과 같습니다.

  1. 가까웠지만 작동하지 않은 첫 번째 쿼리:
선택한다.아이디,s.sum,s.date,@b : = @b + s.sum AS 잔액부터(선택 @b : = 0.0) AS 더미교차 결합tpp AS여기서 ID=1주문 기준s.날짜;

결과는 다음과 같습니다.

이드 날짜. 지급 전 잔여 총액
1 2020-01-01 120 120
1 2020-02-01 130 250
1 2020-03-01 140 380
1 2020-04-01 150 520
1 2020-05-01 160 670
1 2020-06-01 170 840

즉, 결과가 뒤바뀌었습니다.그리고 다음 행의 값으로 값을 늘렸습니다.

  1. 다른 쿼리는 LAG 기능을 사용했지만 감산 부분이 실망스러웠습니다.
선택한다.ID, 날짜,sum(sum)-lag(sum) Over(날짜별 주문) 및FROM tpp여기서 ID=1날짜별 그룹화, ID날짜별 주문

그리고 그 결과:

이드 날짜. 지급 전 잔여 총액
1 2020-01-01 무효의
1 2020-02-01 10
1 2020-03-01 10
1 2020-04-01 10
1 2020-05-01 10
1 2020-06-01 10

뺀 값:

  • 130-120=10;
  • 140-130=10;
  • 150-140=10; 등

SUM() 윈도우 기능만 필요합니다.

SELECT id, date,
       SUM(sum) OVER (ORDER BY date DESC) AS l
FROM tpp
WHERE id = 1
ORDER BY date

데모를 참조하십시오.
결과:

> id | date       |   l
> -: | :--------- | --:
>  1 | 2020-01-01 | 870
>  1 | 2020-02-01 | 750
>  1 | 2020-03-01 | 620
>  1 | 2020-04-01 | 480
>  1 | 2020-05-01 | 330
>  1 | 2020-06-01 | 170

언급URL : https://stackoverflow.com/questions/65628684/calculate-new-value-in-mariadb-based-on-values-in-the-previous-row

반응형