안녕하세요
oracle을 쓰고 있는데 쿼리문 질문좀 드려도 될까요?
테이블에서 날짜를 조회하고, 그 날짜를 데드라인으로 이전 날짜에 대한 특정 컬럼값을 sum해야 합니다. 이때 어떻게 쿼리를 짜면 좋을까요?
예컨대
테이블에 등록일(날짜) 컬럼하고 생산량 컬럼 두개가 있는데요,
날짜 | 생산량
12/01 | 20
12/01 | 20
12/02 | 15
12/03 | 10
각 등록일에 대한 재고 값을 하기 위해서 sum을 활용하고 싶습니다.
근데 등록일뿐만 아니라 날짜 기간을 걸어서 하루마다 날짜가 나오면 좋겠습니다.
제가 원하는 대로 select를 해보자면
날짜 | 생산량누계(sum)
....
11/30 | 0
12/01 | 40
12/02 | 55
12/03 | 65
12/04 | 65
....
도움 주시면 감사하겠습니다. ㅠㅠ
select 날짜, sum(일별생산량) over(order by 날짜) 누적생산량 from (select 날짜, sum(생산량)일별생산량 from 테이블 group by 날짜 ) group by 날짜 order by 날짜
sum() over() 로 해결했습니다!! 감사합니다!!
WITH t AS
(
SELECT '20231201' dt, 20 qty FROM dual
UNION ALL SELECT '20231201', 20 FROM dual
UNION ALL SELECT '20231202', 15 FROM dual
UNION ALL SELECT '20231203', 10 FROM dual
)
SELECT a.dt
, NVL(b.qty, 0) qty
, SUM(NVL(b.qty, 0)) OVER(ORDER BY a.dt) sum_qty
FROM (SELECT TO_CHAR(sdt + LEVEL - 1, 'yyyymmdd') dt
FROM (SELECT TO_DATE('20231130', 'yyyymmdd') sdt
, TO_DATE('20231204', 'yyyymmdd') edt
FROM dual
)
CONNECT BY LEVEL <= edt - sdt + 1
) a
LEFT OUTER JOIN
(SELECT dt
, SUM(qty) qty
FROM t
WHERE dt BETWEEN '20231130' AND '20231204'
GROUP BY dt
) b
ON a.dt = b.dt
;
신경써주셔서 감사합니다 마농님!