데이터가 변경되는 시점을 알기위한 쿼리 질문입니다. 0 4 1,304

by playlyun [PL/SQL] 변경 쿼리 [2015.05.04 11:54:06]


안녕하세요.

현재 데이터를 시간별로 누적하는 테이블이 있습니다.

 

시간 ( t )                         | 데이터값  ( d )

2015-01-01 01:00:01.123 | 1

2015-01-01 01:00:11.123 | 1

2015-01-01 01:00:21.123 | 1

2015-01-01 01:00:31.123 | 1

2015-01-01 01:00:41.123 | 2

 

이런식으로 누적되는 그래프가 있고, 데이터 값이 1 -> 2로 바뀌는 시점을 알려고합니다.

( 실제 데이터값 포맷은 다릅니다 )

 

그래서 이런식으로 접근해봤습니다.

  SELECT d FROM table group by d;

이런식으로 해서 데이터를 묶으니 어떤값들이 존재했는지는 확인이 되는데

시간을 출력하려고하니 문제가 생기네요. 어떤식이 좋을까요? 

테이블의 데이터는 약 9000개 정도 입니다.

 

 

by playlyun [2015.05.04 11:58:01]

움 자답해야겠네요.

group by 에 d,t 로 하였습니다.

그러면서 t를 일단위로 묶었구요.

시간순으로 보기위해 order by 를 추가하였습니다;;


by jkson [2015.05.04 12:25:55]

그룹으로 해결하시면 d가 1->2->1->2 와같이 변경되었을 때 제대로 안 나올 것 같은데요..

with t as 
(select to_date('2015-01-01 01:00:01','yyyy-mm-dd hh24:mi:ss') t, 1 d from dual
union all
select to_date('2015-01-01 01:00:11','yyyy-mm-dd hh24:mi:ss') t, 1 d from dual
union all
select to_date('2015-01-01 01:00:21','yyyy-mm-dd hh24:mi:ss') t, 1 d from dual
union all
select to_date('2015-01-01 01:00:31','yyyy-mm-dd hh24:mi:ss') t, 1 d from dual
union all
select to_date('2015-01-01 01:00:41','yyyy-mm-dd hh24:mi:ss') t, 2 d from dual
)
select * 
  from
    (
    select t, d, lag(d) over (order by t) d2  
     from t
    order by t
    )
 where d != d2

 


by 개발뉴비 [2015.05.04 13:31:50]
SELECT MIN(t), d FROM table group by d;

by 개발뉴비 [2015.05.04 13:40:36]
-- 변경전 마지막 시간도 갖고오고 싶다면 UNION으로....
UNION
SELECT MAX(t), d FROM table GROUP BY d
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입