임의의 값과 가장 가까운 데이터 찾기 0 2 1,889

by redgun0 [2014.01.10 16:28:51]



임의의 테이블에 데이터가 숫자값으로 들어 있을때,

일정 간격의 데이터에 가장 가까운 데이터를 찾는 쿼리를 작성해야 합니다.

도저히 모르겠습니다 ㅠ.ㅜ 고수님들의 지원사격 부탁드립니다.

아래는 예시 입니다.


테이블에 2씩 증가 하는 데이터가 있다고 했을때,
0부터 5씩 증가 하며 그중 가장 가까운 값을 찾아야 합니다.
간격이 앞뒤로 같을 경우 큰값을 선택하면 됩니다.

0 은 0,
5 는 6,
10 은 10,
15 는 16,
20 은 20 ... 이런식의 데이터를 찾아야 합니다.
가장 가까운값중 큰값으로 찾아야 합니다.
by 용근님 [2014.01.10 16:53:06]
SELECT MAX ( col ) KEEP ( DENSE_RANK FIRST ORDER BY ABS ( scope ), col DESC )
  FROM (
        SELECT col
                    , col - 받는값 scope
          FROM t
)

by redgun0 [2014.01.10 18:16:52]
한 결과를 받는게 아니라 여러 로우의 데이터를 조작하는 쿼리가 필요한것이었습니다.
어찌어찌 하다보니 결과가 나오긴 했습니다.
2분 간격으로 데이터가 들어 있을때 5분 간격중 가장 가까운 데이터를 찾아 해당 로우를 뽑아 오는 것입니다.

SELECT *
  FROM (SELECT A,
   A1,
  DATA1,
  DATA2,
  RANK() OVER(PARTITION BY A1 ORDER BY TERM) AS RANK/*간격 데이터중 간격이 가장 작은순으로 RANK 매기기*/
  FROM (SELECT A,
  MOD(A, 300/*구할 간격*/) TERM,
A - MOD(A, 300) A1/*현제의 값에서 필요한 간격 데이터로 변환*/,
DATA1,
DATA2
    FROM (SELECT 1383658080 AS A, 1 DATA1, 2 DATA2 FROM DUAL
  UNION ALL
SELECT 1383658200, 1, 2 FROM DUAL
  UNION ALL
SELECT 1383658320, 1, 2 FROM DUAL
  UNION ALL
SELECT 1383658440, 1, 2 FROM DUAL
  UNION ALL
SELECT 1383658560, 1, 2 FROM DUAL
  UNION ALL
SELECT 1383658680, 1, 2 FROM DUAL
  UNION ALL
SELECT 1383658800, 1, 2 FROM DUAL
  UNION ALL
SELECT 1383658920, 1, 2 FROM DUAL
  UNION ALL
SELECT 1383659040, 1, 2 FROM DUAL
  UNION ALL
SELECT 1383659160, 1, 2 FROM DUAL)
  )
   )
 WHERE RANK = 1/*구한 RANK중 가장 작은 값이 가장 가까운 값*/


2분 간격으로 데이터가 있을때 1분 간격으로 구하는것(들어 있는 데이터 보다 작은 간격으로 구하기)은
안되네요.. 추가적인 내용이 필요해 보입니다 ㅠ.ㅜ 불금인데 언제 퇴근하지 ㅠ.ㅜ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입