with recursive 를 select 가 아닌 where 에 적용할 수 있을까요? 0 5 1,337

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. 혹시 결과값을 얻기 위해 적합한 방안이 떠오르시다면 말씀 부탁 드립니다.

 

 

마지막 평일 금요일인데, 구루비 회원님들 모두 파이팅하시길 바랍니다.

감사합니다.

by jkson [2022.09.23 10:37:16]

원하시는 결과는 

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


by 작두 [2022.09.23 10:53:37]

회사 데이터 적재 과정에서 여러 변수가 있어서 그렇습니다.
단순 GROUP BY로 돌릴 시, 변동 데이터가 적용되지 않아서요.

네 맞습니다 결과 값은 제가 잘못 작성했네요. 수정하겠습니다.


by 마농 [2022.09.23 10:52:41]

"회사 데이터 성격상 해당 쿼리를 적용할 수 없습니다."
이 판단부터가 잘못 된 듯 합니다.
그레서 추가로 이상한(?) 생각들을 하고 계신 듯 합니다.
왜 위와 같은 판단을 하셨는지? 정확하게 알려주세요.


by 마농 [2022.09.23 11:06:07]
SELECT date
     , SUM(SUM(unit)) OVER(ORDER BY date) unit
  FROM table
 GROUP BY date
;

 


by 작두 [2022.09.23 12:30:35]

누적합을 해볼 생각을 못 했네요...

마농님 감사합니다 ^^ 좋은 하루 되세요..!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입