by 작두 [2022.09.23 10:12:20]
1) table
| date | type | unit |
| 2022-09-01 | 입고 | 3 |
| 2022-09-01 | 입고 | 5 |
| 2022-09-01 | 출고 | -1 |
| 2022-09-02 | 입고 | 7 |
| 2022-09-03 | 출고 | -3 |
| 2022-09-03 | 입고 | 8 |
2)
| date | unit |
| 2022-09-01 | 7 |
| 2022-09-02 | 14 |
| 2022-09-03 | 19 |
안녕하세요, 1) 테이블을 통해 2) 결과 값을 구하고 싶습니다.
단순히
Select date, sum(unit) from table group by date
를 하고 싶으나, 회사 데이터 성격상 해당 쿼리를 적용할 수 없습니다.
정확한 데이터를 추출하기 위해선
select date, sum(unit) from table where date < '2022-09-01' group by date
select date, sum(unit) from table where date < '2022-09-02' group by date
select date, sum(unit) from table where date < '2022-09-03' group by date
각 쿼리의 결과값이 union all 되어야합니다.
그래서 with recursive 문에 변수를 써서 where 범위를 점점 확장시키는 쿼리를 만들려고 했습니다.
찾아보니 다 select 에서만 변수를 사용하고 where 절에는 종료 조건만 넣는 듯하여 사용할 수 있는지도 의문이 듭니다.
1. with recursive 문에 where 절에 변수를 넣을 수 없나요?
2. 혹시 결과값을 얻기 위해 적합한 방안이 떠오르시다면 말씀 부탁 드립니다.
마지막 평일 금요일인데, 구루비 회원님들 모두 파이팅하시길 바랍니다.
감사합니다.
원하시는 결과는
select date, sum(unit) from table group by date 쿼리로 나오는데 왜 해당 쿼리를 사용할 수 없는지요?
select date, sum(unit) from table where date < '2022-09-01' group by date
select date, sum(unit) from table where date < '2022-09-02' group by date
select date, sum(unit) from table where date < '2022-09-03' group by date
를 union all 한 결과는 원하시는 결과 데이터가 안 나와요. 아래와 같이 나오겠네요.
2022-09-01 7
2022-09-01 7
2022-09-02 7
회사 데이터 적재 과정에서 여러 변수가 있어서 그렇습니다.
단순 GROUP BY로 돌릴 시, 변동 데이터가 적용되지 않아서요.
네 맞습니다 결과 값은 제가 잘못 작성했네요. 수정하겠습니다.
"회사 데이터 성격상 해당 쿼리를 적용할 수 없습니다."
이 판단부터가 잘못 된 듯 합니다.
그레서 추가로 이상한(?) 생각들을 하고 계신 듯 합니다.
왜 위와 같은 판단을 하셨는지? 정확하게 알려주세요.
SELECT date
, SUM(SUM(unit)) OVER(ORDER BY date) unit
FROM table
GROUP BY date
;
누적합을 해볼 생각을 못 했네요...
마농님 감사합니다 ^^ 좋은 하루 되세요..!