특정 시간내에 들어올경우 select 내부 update문 질문. 0 1 1,812

by 구기웅 [Oracle 기초] [2014.03.31 13:00:13]


안녕하세요. 질문같지도 안은 질문이고 상식상 맞지 않는 질문을 드릴수도 있으나. 많은 검색과 삽질을 해보았으나 아직 해결을 못해서 올립니다.

해당 테이블에 등록되어있는 로우들 중에 현재 시간과 등록된 시간값들을 비교해서 오차범위를 1시간 30분 10분 5분 단위로 값을 가져오려고 합니다. 아직 제가 정리가 잘안된부분도 있으나 현재까지 제가 작업햇던부분은 이렇게 됩니다.
SELECT
			TO_CHAR(START_DATE, 'YYYY-MM-DD') AS START_DATE_DP
			, A.*
		FROM (
			SELECT
				SEQ
				, TITLE
				, CONTENT
				, START_DATE
				, END_DATE
				, STATUS_ALARM
				, STATUS_CD
			FROM
				SERVERCHECK
			WHERE
				DEL_FL != 'Y' 
				AND STATUS_ALARM != 'E' 
				AND TO_CHAR(SYSDATE, 'YYYYMMDD') = TO_CHAR(START_DATE, 'YYYYMMDD')
				AND TO_CHAR(SYSDATE, 'HH24') 	(TO_CHAR(START_DATE, 'HH24') - 1)	
		) A
		WHERE
내부 where 조건에서 처럼 현재 년월일이 일치하며 등록된 시작 시간 -1 이 현재 시간보다 작거나 같을때 참이 됩니다. 내부 A 까지는 select진행시 예상한 조건에 맞게 검색이 되는것을 확인했으며 그 내부에 조건에 있는 row에
CASE
	WHEN STATUS_ALARM = 'N' THEN '1' 
	WHEN STATUS_ALARM = '1' THEN '2' 
	WHEN STATUS_ALARM = '2' THEN '3' 
	WHEN STATUS_ALARM = '3' THEN 'E' 
END AS ALARM.NOTI
case 문을 추가해서 STATUS_ALARM의 값을 변경 하려 합니다. 추가로 case 문의 변경된 STATUS_ALARM의 상태에 따라서 STATUS_CD 의 값도 추가로 update 문을 사용해서 업데이트를 하려 하는데요
해당부분에 대한 쿼리작성진행을 어떻게 해야할지 모르겠네요.
너무 두서없이 적은것 같아 죄송합니다.
by 홍상표 [2014.03.31 13:30:25]
date 타입에서 date 타입을 빼면 초가 나옵니다..

1시간 이내 오차라면

where  sysdate-startdate >= 3600  ---60분*60초 1시간이내
where  sysdate-startdate >= 1800  ---30분*60초 30분이내
where  sysdate-startdate >= 600  ---10분*60초 10분이내
where  sysdate-startdate >= 300  ---5분*60초 5분이내

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