특정판매율에 따른 판매시점구하는 쿼리 0 3 1,094

by 미노~ [SQL Query] [2012.10.19 19:38:23]



안녕하세요.
현재 오라클 10g를 사용하고 있습니다.
아래에 내용이 잘못된 질의를 올려 수정하여 다시 한번 질의드립니다.

아래와 같이 제품별(CODE), 일자별(DT),  입고수량(IN), 판매수량(SELL)에 대한
테이블이 있다고 가정했을때에 해당 제품별 입고대비 판매율이 50%에
도달했을 시점의 일자(DT)를 구하고자 합니다.

이때, 만약 특정 제품의 최종누적입고대비 최종판매율이 50% 이상인 경우에는 50%에
도달했을 당시의 시점일자를 구하면 되며, 특정제품의 최종누적입고대비 최종판매율이 50%이하이면
최종 일자를 구하면 됩니다.

단, 테이블내의 제품에 대한 입고, 판매수량은 일자누적데이타가 아니라
일자별에 대한 수불내용입니다.


TEMP1(일자별 수불테이블)
==============================
   CODE     DT    IN SELL   
==============================
  A     20120105   5 2    ====>   판매율 =  25%
      A     20120107   3 2    ====>   판매율 =  50%
  A     20120105   0 2    ====>   판매율 =  75%
  B     20120101   4 1    ====>   판매율 =  10%
  B     20120105   6 0    ====>   판매율 =  10%
==============================

위의 내용과 같은 테이블의 데이타를 아래와 같은 결과를 얻고자 합니다.



결과화면
=======================================
   CODE   DT 
=======================================
  A   20120107
  B   20120105
=======================================


다시한번 관심 부탁드립니다.. 감사합니다..^^

by 손님 [2012.10.20 19:20:16]
WITH TEMP1 AS (
SELECT 'A' CODE ,'20120105' DT ,5 INN ,2 SEL FROM DUAL UNION ALL
SELECT 'A' CODE ,'20120107' DT ,3 INN ,2 SEL FROM DUAL UNION ALL
SELECT 'A' CODE ,'20120109' DT ,0 INN ,2 SEL FROM DUAL UNION ALL
SELECT 'B' CODE ,'20120101' DT ,4 INN ,1 SEL FROM DUAL UNION ALL
SELECT 'B' CODE ,'20120105' DT ,6 INN ,0 SEL FROM DUAL
)
SELECT CODE CODE
  ,MAX(DT)  DT
  FROM (
    SELECT CODE ,DT
  ,LAG(RAT, 1, 0) OVER (PARTITION BY CODE ORDER BY DT) P_RAT
  FROM (
  SELECT CODE ,DT
    ,(SUM(SEL) OVER(PARTITION BY CODE ORDER BY DT) /
  SUM(INN) OVER(PARTITION BY CODE ORDER BY DT)) RAT
    FROM TEMP1
  )
  )
 WHERE  P_RAT < 0.5
 GROUP BY CODE

by 마농 [2012.10.22 10:04:47]
-- 해당 일자 기준 누적 입고액을 기준으로 할지?
-- 최종 일자 기준 누적 입고액을 기준으로 할지?
SELECT code
     , NVL(MIN(CASE WHEN sell / in_1 >= 0.5 THEN dt END), MAX(dt)) dt_1
     , NVL(MIN(CASE WHEN sell / in_2 >= 0.5 THEN dt END), MAX(dt)) dt_2
  FROM (SELECT code, dt
             , SUM(in_v) OVER(PARTITION BY code) in_1
             , SUM(in_v) OVER(PARTITION BY code ORDER BY dt) in_2
             , SUM(sell) OVER(PARTITION BY code ORDER BY dt) sell
          FROM t
        )
 GROUP BY code
 ORDER BY code
;

by 미노~ [2012.10.23 19:35:45]

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