반응형
이전 행의 값을 기준으로 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 |
몇 가지 긴밀한 해결책을 찾았지만 필요에 따라 적절한 방법으로 변경할 수 없습니다.어떤 아이디어든 감사하겠습니다.
마지막 열의 논리는 다음과 같습니다.
- 첫 번째 값은 총계(120+130+140...)입니다.
- 모든 다음 값은 동일한 행의 합계 열의 값만큼 감소한 값으로부터 계산됩니다.
- 870-120=750;
- 750-130=620;
- 620-140=304 등
제 시도는 다음과 같습니다.
- 가까웠지만 작동하지 않은 첫 번째 쿼리:
선택한다.아이디,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 |
즉, 결과가 뒤바뀌었습니다.그리고 다음 행의 값으로 값을 늘렸습니다.
- 다른 쿼리는 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
반응형
'source' 카테고리의 다른 글
| 쌓인 막대 차트에 데이터 값 표시(ggplot2) (0) | 2023.06.06 |
|---|---|
| 큰 데이터 프레임에 인덱스(숫자 ID) 열 추가 (0) | 2023.06.06 |
| C로 퍼센트 기호(%)를 인쇄하려면 어떻게 해야 합니까? (0) | 2023.06.06 |
| 루비에서 send()는 무엇을 합니까? (0) | 2023.06.06 |
| __init_.py를 사용하여 전역 변수를 정의할 수 있습니까? (0) | 2023.06.06 |