특정 기간에 해당하는 데이터를 가져오고 데이터 수정 질문좀 드리겠습니다. 0 3 1,442

by 구기웅 [SQL Query] [2014.04.02 11:04:54]


특정 테이블에 시작일을 가져와서 미리 알림을 주는 기능을 구현하려고 하는데요.

시작일에는 date 타입으로 값들이 저장 됩니다. 그 값을 가져와서

2014-04-02 20:30 값이 시작일이라고 한다면 클라이언트쪽에서 제가 2014-04-02 19:30 분에 호출을 합니다.

그래서 지금처럼 1시간의 차이가 있을경우 부터

STATUS_ALARM 이라는 녀석의 값을 '1' 로 변경합니다 기본값은 'N'으로 되어 있구요.

추후 30분 일경우 STATUS_ALARM 이 '1' 로 변경된 녀석을 '2'로 변경 해주면 이후 진행도 간편하게 처리가 될거 같은데요.

쿼리를 도저히 작성을 못하겠네요.
by 김용학 [2014.04.02 11:20:50]
아래와 같은 방식으로 활용하면 될거 같네요.
WITH T(DT) AS
(
        SELECT SYSDATE - (1/24) * 1  FROM DUAL
   UNION ALL SELECT SYSDATE - (1/24) * 2  FROM DUAL
   UNION ALL SELECT SYSDATE + (1/24) * 0.5 FROM DUAL
   UNION ALL SELECT SYSDATE + (1/24) * 1  FROM DUAL
   UNION ALL SELECT SYSDATE + (1/24) * 2  FROM DUAL
   UNION ALL SELECT SYSDATE + (1/24) * 3  FROM DUAL
   UNION ALL SELECT SYSDATE + (1/24) * 4  FROM DUAL
)
SELECT DT
   , CASE WHEN DT < SYSDATE + (1/24) * 1 AND DT >= SYSDATE + (1/24) * 0.5 THEN '1'
      WHEN DT >= SYSDATE + (1/24) * 1 THEN 'N'
      END GUBN
 FROM T ;

by 구기웅 [2014.04.02 11:27:56]
답변 감사합니다.
부족한 설명에도 제가 원하는 값은 아니지만 힌트는 얻어서 좀더 고민해보도록 하겠습니다 
다시한번 감사드립니다.

by 마농 [2014.04.02 16:59:26]
-- 0. 매시각 30분 간격으로 자동 호출된다고 가정하고 -- 
-- 1. 먼저 1로 바뀐 자료를 찾아 2로 변경 --
UPDATE t
   SET status_alarm = '2'
 WHERE status_alarm = '1'
;
-- 2. 1시간 안쪽 자료를 찾아 1로 변경
UPDATE t
   SET status_alarm = '1'
 WHERE status_alarm = 'N'
   AND dt <= sysdate + 1/24
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입