집계 그룹을 어떻게 해야할지 모르겠네요. 0 5 2,839

by 틸다 [SQL Query] lag lead 순차적데이터의 그룹잡기 [2013.12.12 02:17:12]



데이터
---------------------------------------------------------------------------------------------
yyyymmdd  dttm cd gubun    순차
20131206   2013/12/06 22:00   A   start_time   1
20131206   2013/12/06 22:06   C   end_time    1
20131206   2013/12/06 22:08   C   start_time   2
20131206   2013/12/06 22:16   C   start_time   2
20131206   2013/12/06 22:26   C   start_time   2
20131206   2013/12/06 22:36   C   end_time    2
20131206   2013/12/06 22:56   C   start_time   3
20131206   2013/12/06 23:06   C   end_time    3
---------------------------------------------------------------------------------------------------

안녕하세요.. 종일 회사에서 붙들고 있다가 도저히 안나와서 이시간에 올리네요
저 순차값을 구하고 싶어서요

조건은 gubun의 start_time이 end_time을 만나면 그 둘을 그룹핑하고
다시 start_time이면 count나 또는 그룹핑을 하고 싶습니다.

다음조건이 start_time이면 같은그룹인거고 end_time을 만나기 전까지요.

count(gubun) over(yyyymmdd, cd, gubun order yyyymmdd, dtttm) 순차
이렇게.. 될까 했는데 안되더라구요 T.T

전문가의 손길을 애타게 기다려 봅니다.
by 순둥이 [2013.12.12 07:31:36]
table function을 사용해 보는 것은 어떨지...
순차 부분을 로직으로 풀면 될 것 같은데요...

by 틸다 [2013.12.12 07:54:44]

순차...그걸..구해야하는거라서요. 11,2222,3333


by 마농 [2013.12.12 08:17:33]
WITH t AS
(
SELECT '20131206' yyyymmdd, '2013/12/06 22:00' dttm, 'A' cd, 'start_time' gubun FROM dual
UNION ALL SELECT '20131206', '2013/12/06 22:06', 'C', 'end_time'   FROM dual
UNION ALL SELECT '20131206', '2013/12/06 22:08', 'C', 'start_time' FROM dual
UNION ALL SELECT '20131206', '2013/12/06 22:16', 'C', 'start_time' FROM dual
UNION ALL SELECT '20131206', '2013/12/06 22:26', 'C', 'start_time' FROM dual
UNION ALL SELECT '20131206', '2013/12/06 22:36', 'C', 'end_time'   FROM dual
UNION ALL SELECT '20131206', '2013/12/06 22:56', 'C', 'start_time' FROM dual
UNION ALL SELECT '20131206', '2013/12/06 23:06', 'C', 'end_time'   FROM dual
)
SELECT yyyymmdd, dttm, cd, gubun
     , COUNT(DECODE(gubun, 'end_time', 1)) OVER(ORDER BY dttm
       ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) + 1 seq
  FROM t
;

by 틸다 [2013.12.12 08:28:24]
ㄲ ㅑ 오 ~~~ 당신의 능력에 감복을
10년 IT넘게 해도..이런데서 헤매며 잠을 못이뤘는데.

에혀..반성과 함께
이곳에서 더 많이 돌아다녀야겠어요.

커피한잔 사드리고 싶네요 ^^ 감사합니다.

by 우리집아찌 [2013.12.12 09:13:14]
WITH T(yyyymmdd, dttm, cd ,gubun ,  순차 ) AS (
SELECT '20131206' ,'2013/12/06 22:00' ,'A' ,'start_time' ,'1' FROM DUAL UNION ALL
SELECT '20131206' ,'2013/12/06 22:06' ,'C' ,'end_time' ,'1' FROM DUAL UNION ALL
SELECT '20131206' ,'2013/12/06 22:08' ,'C' ,'start_time' ,'2' FROM DUAL UNION ALL
SELECT '20131206' ,'2013/12/06 22:16' ,'C' ,'start_time' ,'2' FROM DUAL UNION ALL
SELECT '20131206' ,'2013/12/06 22:26' ,'C' ,'start_time' ,'2' FROM DUAL UNION ALL
SELECT '20131206' ,'2013/12/06 22:36' ,'C' ,'end_time' ,'2' FROM DUAL UNION ALL
SELECT '20131206' ,'2013/12/06 22:56' ,'C' ,'start_time' ,'3' FROM DUAL UNION ALL
SELECT '20131206' ,'2013/12/06 23:06' ,'C' ,'end_time' ,'3' FROM DUAL )

SELECT T.* ,
    SUM(DECODE(GUBUN,'end_time',1,0)) OVER(ORDER BY DTTM) + 1 
    - (DECODE(GUBUN,'end_time',1,0))
FROM T
 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입