24시간 데이터를 2초단위로 집계하는 SQL을 만들려고 합니다. 0 14 1,764

by dknwke [SQL Query] [2022.04.29 10:18:47]


오라클 환경입니다..

24시간 데이터를 2초단위로 집계하는 SQL을 만들려고 합니다.

이유는 한번에 insert되는 모든 데이터를 그룹으로 묶어서 하나의 로우가 나오도록 조회해야하는데

한번에 데이터가 들어가는 시간이 1초정도 차이가 나더라구요...

때문에 'YYYYMMDDHH24MISS'로 이루어진 컬럼을 2초 단위로 group by 해야 합니다.....

고견 부탁드립니다.

by 마농 [2022.04.29 10:25:37]

해당 일자 항목은 VARCHAR2(14) 인가요? 아니면 date 인가요?
2초 단위 집계가 과연 원하는 결과를 뽑을 수 있는 걸까요?
한번에 입력되는 그룹을 확인 할 다른 방법은 없는지?


by dknwke [2022.04.29 10:39:52]

Date 타입입니다..
모든 데이터 insert 시 보통 초단위가 같거나 1초정도 차이가 납니다..!

그룹으로 묶기위해 유일하게 사용될 수 있는건 시간 컬럼밖에 존재하지 않아서..

새로운 컬럼을 추가해야되나 고민도 되긴합니다만 경험이 부족하다보니.......

좋지 않은 방법일까요 ? 


by 마농 [2022.04.29 10:45:32]

방안이 될 수 있긴 한데? 정확하지 않겠죠.
예를 들면 2번에 나눠서 작업된게 하나로 묶일 가능성도 존재하고
반대로 하나의 작업이 두개로 나뉠 가능성도 존재하고


by 우주민 [2022.04.29 10:49:56]

데이터 insert 시에 소요되는 시간이 단순 0 ~ 1 초 차이가 난다고 2초 단위로 group by 하는 것은 위험하지 않을까요?

첫번째 그룹 데이터 이후 바로 연달아 두번째 그룹 데이터가 들어올 때 두 데이터 그룹간의 소요시간이 무척 짧게 된다면 이 두개의 그룹 데이터는 하나의 그룹 데이터로 취합이 될 수도 있고, 지금까지는 없다고 해도 차후에 insert 에 2초 이상 걸리는 데이터들이 입력될 경우에도 하나의 그룹 데이터를 둘로 나눠서 취합 할 수도 있습니다.

모델을 변경할 수 있다면 차라리 insert 에 관련된 일련번호를 따로 기록하는 컬럼을 만드는 것이 좋은 해결책 으로 보여집니다.


by dknwke [2022.04.29 11:14:16]

네 저도 위험하다고 생각합니다만 ..

일련번호 기록하는 컬럼을 따로 생성 하는법도 생각은 해보았습니다...

현재 DB 구조를 변경하게되면 기존 as-is 데이터들은 일련번호가 존재하지 않기때문에.... 이에대한 방안도 있을까요 ?

 


by 마농 [2022.04.29 10:47:55]

한번에 입력이라는게 뭘까요?
1. Insert ~ Select 구문을 통한거라면? 시간은 모두 동일할 것입니다.
2. loop 안에서 건건이 입력되는 거라면 첫행과 마지막 행의 시간이 다를 수도 있겠네요.


by dknwke [2022.04.29 11:10:08]

한번에 입력은 애플리케이션단에서 이벤트가 한번 발생할 때 해당 테이블에 insert가 여러번 발생되는것을 말씀드리는겁니다

insert ~ select 구문은 아닙니다.

데이터를 세팅하고 , 세팅한 객체를 건건히 DB에 insert하고있습니다.

insert 되는 데이터 자체는 많지는 않지만 말씀하신대로 첫행과 마지막행의 시간의 차이가 생기기 때문에 초단위로 집계하는 방안을 생각해보았습니다.


by 축구쟁이 [2022.04.29 11:13:11]

한번에 입력하는 부분이 쿼리든 SP내 loop든 어플리케이션이든 해당 부분에서 그룹핑에 사용할 데이터를 동일하게 지정하면 됩니다.

시간이 될 수도, 다른 특정 값이 될 수도 있습니다.

데이터 입력 순서에 따라 시간 차이가 나서 그것때문에 2초 단위로 group by 한다는 생각은 좋지 않은 생각입니다.

기준이 변경될 수 있어 결과가 일정하지 않습니다.


by dknwke [2022.04.29 11:29:20]

@축구쟁이

어떤 말씀이신지 이해되었습니다

애플리케이션단에서 insert 전에 미리 현재시간을 세팅해두고 insert 시에 해당 변수로 insert 시키면 한번에 입력할 때 동일한 시간으로 입력 되겠네요!
사전에 등록된 데이터들은 시간이 1초정도 차이가 나고있는데 이에 대한 해결책은 없을까요 ??


by 축구쟁이 [2022.04.29 11:37:03]

이전 데이터들을 한번 가공을 해야할텐데 그룹으로 묶기 위해 사용될 수 있는 것이 시간 컬럼밖에

존재하지 않는다고 하셔서 설령 그룹을 묶어도 검증할 수 있는 방법이 없겠습니다.

일단 다시 한 번 잘 살펴보셔서 그룹에 대한 기준 데이터로 사용할 수 있는 것이 있는지 확인해보시고

그래도 없으시다면 집계 데이터의 중요도를 판단하여 일부 오차를 감안하여 작업을 진행할 지

결정하셔야 할 것 같습니다.

 


by 마농 [2022.04.29 12:52:33]

입력 경로는 하나 뿐인가요?
동시에 여러군데서 입력 가능하다면?
시간만으로는 구분이 안됩니다.


by dknwke [2022.04.29 13:31:20]

입력 경로는 하나입니다. 특정 이벤트 발생 후 값을 세팅하여 DB에 쌓고있으며,

관리자 페이지에서 고객 요청 시 수정한 필드에 대한 데이터 이력을 쌓는 테이블이라 크게 부하가 크진 않습니다.

가끔가다 요청이 들어오면 수정하는정도..입니다!


by dknwke [2022.04.29 13:33:48]

데이터를 insert 할 때 애플리케이션단에서 sysdate 대신 현재시간을 미리 date 형식으로 저장한 후 insert 시키는 방법은 나쁘지 않을까요??
그런 코드를 본적이 없긴하다만....


by 마농 [2022.04.29 13:35:49]

유일한 검증 항목이 시간 항목 뿐이라면.
하나의 작업에는 동일한 시간이 담기도록 보완하면 될 것 같습니다.

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