통계관련 해서 질문하나 드려요 ! 0 5 1,005

by 탑개발자 [2015.11.17 22:23:16]


테이블 STAT_TABLE

SDT_DATE   NODE    A_COUNT    B_COUNT     C_COUNT

20141101     MND        10              11              10

20141102     MND        13              11              11

20141117     MAF         15              17              11

20141203     MAC        9               12               14

20150102     MDC        11              12               14

      :                          :                :                   :

20151117     MND       3              3                  3

이런식으로 매일 데이터가 들어가는 구조 있는다 (테이블 예는 위처럼 해놨지만 거의 매일 데이터가 들어가고요 NODE 별로 하루에 한건씩 들어간다고 생각하면 됩니다 )

데이터는 한달 기준 누적 데이터 입니다.  ex) MND 라는 노드 20141101  들어간 데이터에 에 추가된 값이 더해져서 20141102 날 들어가는 구조여 서 결국은 그달에 마지막에 들어간 데이터가 최종 누적 데이터가 되는 겁니다.

그래서 2014년 11월에 18까지 데이터가 들어가면 18일 데이터가 최종 누적 데이터가 되는거죠 !

제가 원하는 구조는  사용 자가 20151117일로 검색을 하면  검색날짜 기준으로 일년치는 검색하는 건데 실제로는

20141201  ~20151131 이 검색이 되는 겁니다.  날짜는 자바에서 만들어서 보네도 되고  쿼리에서 만들어도 상관 없을거 같습니다.

검색 결과는

SDT_DATE   NODE    A_COUNT    B_COUNT     C_COUNT

  201412     MND       20              30                24       -> 2014년 12월에 들어있는 MND 데이터중 마지막날데이터

  201501     MND       10             29                  11      -> 2015년 01월에 들어있는 MND 데이터중 마지막날데이터
     :                          :                :                   :

  201511     MND        12            24                   34   -> 2015년 11월에 들어있는 MND 데이터중 마지막날데이터

  201412     MAF       12              44                 23       -> 2014년 12월에 들어있는 MAF 데이터중 마지막날데이터


  201501     MAF       11             24                  12      -> 2015년 01월에 들어있는 MAF 데이터중 마지막날데이터
     :                          :                :                   :


  201511     MAF        123            22                  34    -> 2015년 11월에 들어있는 MAF 데이터중 마지막날데이터

 

이런 식으로  NODE 별로 1년치 데이터가 나오는 구조 였으면 좋겠습니다. 

쿼리조언 좀 부탁 드립니다.

 

 

 

 

by 우리집아찌 [2015.11.18 08:25:12]

노브별로 월 데이터를 가져오면 월마다 모든 노드가 존재하나요?


by 우리집아찌 [2015.11.18 08:39:12]
/* 월별 각노드가 존재한다는 가정 */
WITH STAT_TABLE AS(
SELECT '20151101' SDT_DATE , 'MND' NODE , 10 A_COUNT , 11 B_COUNT , 10 C_COUNT FROM DUAL UNION ALL
SELECT '20151102' , 'MND' , 11 , 12 , 11 FROM DUAL UNION ALL
SELECT '20151103' , 'MND' , 12 , 13 , 12 FROM DUAL UNION ALL
SELECT '20151201' , 'MND' , 13 , 14 , 13 FROM DUAL UNION ALL
SELECT '20151202' , 'MND' , 14 , 15 , 14 FROM DUAL UNION ALL
SELECT '20151203' , 'MND' , 15 , 16 , 15 FROM DUAL UNION ALL
SELECT '20151204' , 'MND' , 16 , 17 , 16 FROM DUAL UNION ALL
SELECT '20151101' , 'MDC' , 10 , 11 , 11 FROM DUAL UNION ALL
SELECT '20151102' , 'MDC' , 11 , 12 , 12 FROM DUAL UNION ALL
SELECT '20151103' , 'MDC' , 12 , 13 , 13 FROM DUAL UNION ALL
SELECT '20151201' , 'MDC' , 13 , 14 , 14 FROM DUAL UNION ALL
SELECT '20151202' , 'MDC' , 14 , 15 , 15 FROM DUAL UNION ALL
SELECT '20151203' , 'MDC' , 15 , 16 , 16 FROM DUAL UNION ALL
SELECT '20151204' , 'MDC' , 16 , 17 , 17 FROM DUAL 
)

SELECT * 
FROM 
(SELECT  SUBSTR(SDT_DATE,1,6) SDT_DATE
      , SDT_DATE AS ORG_SDT_DATE
      , NODE
      , A_COUNT
      , B_COUNT
      , C_COUNT
      , ROW_NUMBER() OVER(PARTITION BY SUBSTR(SDT_DATE,1,6) , NODE ORDER BY SDT_DATE DESC ) RN
  FROM STAT_TABLE
) WHERE RN = 1

 
 
 
 

 


by 탑개발자 [2015.11.22 21:56:13]

답변 감사드립니다.


by 마농 [2015.11.18 10:09:05]
SELECT a.*
  FROM stat_table a
     , (SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(dt), 1-LEVEL), 'yyyymmdd') dt
          FROM (SELECT TO_DATE('20151117', 'yyyymmdd') dt FROM dual)
         CONNECT BY LEVEL <= 12
        ) b
 WHERE a.sdt_date = b.dt
 ORDER BY a.node, a.sdt_date
;

 


by 탑개발자 [2015.11.22 21:56:21]

답변 감사드립니다.

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