dev_julystar
122
2020-01-13 15:01:16 작성 2020-01-13 15:01:40 수정됨
3
648

MSSQL 프로시저 생성에대해 여쭤봅니다.


안녕하세요.

사회초년생으로 회사에 들어와 근무를 하는데

기존에 하지 않았던 DB 부분을 잠깐 맡아서 하게되었는데

생각처럼 잘 되지 않아 조언 구해봅니다.

현재 저희는 3분마다 기계의 데이터를 받고있습니다.

만약 고장이 발생시 불린값에 1이뜨고 아닐시 0으로 계속 3분마다 테이블에 저장을 시키는데

데이터 양이 많아 불린값이 변동이 없던 시간대(중복으로 계속 쌓이는 라인)을

삭제하는 프로시저를 만드려고 합니다.

어떠한 로직으로 작성해야 할지 좀 여쭤봐도 될까요?

(현재 고장 발생원인은 12개로 각 12개의 컬럼이 3분단위로 받아지고 있습니다)


ex)

시간        고장원인

12:03:00       0         0        0         0         0        0        0         0        0          0         0        0 

12:06:00       0         0        0         0         0        0        0         0        0          0         0        0 (지울라인)

12:09:00       0         0        0         0         0        0        0         0        0          0         0        0 (지울라인)

12:12:00       1        0        0         0         0        0        0         0        0          0         0         0 

12:15:00       1         0        0         0         0        0        0         0        0          0         0        0 (지울라인)

12:18:00       0         0        0         0         0        0        0         0        0          0         0        0 

12:21:00       0         0        1         0         0        0        0         0        0          0         0        0 

12:24:00       0         0        1        0         0        0        0         0        0          0         0         0 (지울라인)

0
  • 댓글 3

  • taleming
    31
    2020-01-13 18:00:02

    CREATE PROCEDURE ERRLogDelete
    AS
     -- 삭제 해야할 내역을 임시 테이블로 옮김
     Select a.ErrDateTime
     Into    #TempErrLog
     From (
      Select  ErrDateTime
      ,       Err1
      ,       Err2
      ,       Err3
      ,       Err4
      ,       Err5
      ,       Err6
      ,  (CASE WHEN Err1 = LAG(Err1, 1, 0) Over (Order by ErrDateTime) THEN 0 ELSE 1 END) as ChkErr1
      ,  (CASE WHEN Err2 = LAG(Err2, 1, 0) Over (Order by ErrDateTime) THEN 0 ELSE 1 END) as ChkErr2
      ,  (CASE WHEN Err3 = LAG(Err3, 1, 0) Over (Order by ErrDateTime) THEN 0 ELSE 1 END) as ChkErr3
      ,  (CASE WHEN Err4 = LAG(Err4, 1, 0) Over (Order by ErrDateTime) THEN 0 ELSE 1 END) as ChkErr4
      ,  (CASE WHEN Err5 = LAG(Err5, 1, 0) Over (Order by ErrDateTime) THEN 0 ELSE 1 END) as ChkErr5
      ,  (CASE WHEN Err6 = LAG(Err6, 1, 0) Over (Order by ErrDateTime) THEN 0 ELSE 1 END) as ChkErr6
      ,       ROW_NUMBER() over (Order by ErrDateTime) as r_num
      From    _TempErrLog
     ) as a
     Where   a.r_num <> 1
     And     a.ChkErr1 + a.ChkErr2 + a.ChkErr3 + a.ChkErr4 + a.ChkErr5 + a.ChkErr6 = 0


     -- 조인후 삭제
     Delete _TempErrLog
     From _TempErrLog as a
        join #TempErrLog as b on a.ErrDateTime = b.ErrDateTime


  • taleming
    31
    2020-01-13 18:15:57

    다음에는 Q&A에서 뵐께요:D

  • dev_julystar
    122
    2020-01-14 09:03:46

    아..죄송합니다,, 담에는  Q&A에 올리도록 하겠습니다

    답변 너무 감사합니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.