sql 재문의 드립니다. 0 2 1,124

by 임형섭 [SQL Query] [2017.09.25 14:26:04]


제가 익수지 않은 업무를 하다보니 처음에 문의를 잘못드린듯합니다.;;

다시한번 문의드리겠습니다.;;

일자별 매출과 수금 데이터가 있습니다.

일자              매출           수금           매출-수금      기일

2017.01.01      100              0                100              

2017.02.01      100              50                50              

2017.03.01      100              210             -110         2017.01.01

2017.04.01      100              200            -100          2017.03.01

2017.05.01      100              50               50           

2017.06.01        0             100              -100          2017.05.01

기일 데이터를 가져오고싶습니다.

여기서 기일은 매출-수금이 마이너스 일경우

이전일자의 매출을 역순으로 더하여 +가 되는 최초일입니다.

예를들어 2017-03-01 의 경우 -110원입니다.

2월의 매출을 더해도 -10이 되기때문에

1월의 매출까지 더해야 +90이 되기때문에 날짜가 2017-01-01이 됩니다. 

데이터 베이스는 오라클 9i를 사용하고 있습니다.

감사합니다 ^^

by 마농 [2017.09.25 14:55:19]

이상한 요구조건 이네요?
 - 매출만 가지고 따진다는게 이상합니다.
 - 수금도 함께 따져봐야 하는게 아닐런지?
일단 요구조건 대로 만들어 보긴 했지만...
 - 이게 실제로 사용이 될지? 실제로 유의미한 자료가 될지? 의문이네요?

WITH t AS
(
SELECT '2017.01.01' dt, 100 v1, 0 v2 FROM dual
UNION ALL SELECT '2017.02.01', 100,  50 FROM dual
UNION ALL SELECT '2017.03.01', 100, 210 FROM dual
UNION ALL SELECT '2017.04.01', 100, 200 FROM dual
UNION ALL SELECT '2017.05.01', 100,  50 FROM dual
UNION ALL SELECT '2017.06.01',   0, 100 FROM dual
)
, tmp AS
(
SELECT dt
     , v1
     , v2
     , v1 - v2 v3
     , SUM(v1) OVER(ORDER BY dt DESC) v4
  FROM t
)
SELECT a.dt
     , a.v1
     , a.v2
     , a.v3
     , MAX(b.dt) v5
  FROM tmp a
  LEFT OUTER JOIN tmp b
    ON a.dt > b.dt
   AND a.v3 < 0
   AND b.v4 - a.v4 + a.v3 >= 0
 GROUP BY a.dt, a.v1, a.v2, a.v3
 ORDER BY a.dt
;

 


by 임형섭 [2017.09.25 15:06:25]

답변감사드립니다.

회계업무를 한지 얼마 되지 않아서 제가 필요한 기능만 이해하는 한도에서 설명을 드리다 보니 설명이 조금 맞지 않을 수 있을듯합니다.

주신 sql 분석해서 같은 질문 안하도록 노력하겠습니다.

다시 한번 감사드립니다 ^^

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