쿼리문 모르겠어서 이렇게 질문합니다 0 4 2,540

by 마숑 [SQL Query] 쿼리문 [2013.05.03 20:14:44]



쿼리문의 기초수준인 한 개발자입니다~ 질문을 하나하고싶어 이렇게 글을 올립니다.

선배님분들의 조언을 기다립니다.
--------------------------------------------------
ex)    table : t1
t1 : 
  num ,  test
    7       y
    6
    5
    4
    3
--------------------------------------------------
이렇게 t1(테이블명) 에 num과 test라는 칼럼이있고
test의 칼럼에는 현재 사용중인 num에 y 가 들어가있는 상태인 테이블입니다.
ps. num은 숫자형이 아니지만 수치로 비교할수 있게끔 날짜가 포함된 칼럼입니다.

예를 들어 지금 수행중인 num 을 찾을땐
select *
from   t1
where test = 'y'
가 됩니다.

여기서 제가 하고싶은것은
1)현재 수행중인것 전에 있던 num 만을 뽑아내는것과
2)현재 수행중인것 전전에 있던 num 만을 뽑아내는것

num이 저렇게 1차이로 되어있는것이아니고 수치가 몇인지 알수없으며 where num = 6 이런식으로 뽑을수는 없습니다.

1번같은경우
select max(num)
from t1
where num < ( select num
from t1
where test = 'y')
로 하면 나오는것을 확인할수 있었습니다.

그런데 전전 것을 뽑아내는것을 못하겠어서 이렇게 질문올립니다.
int값을 하나 넣으면 몇번째전 것이 나오게끔 짜고싶은데 아직 모르겠습니다. 도와주세요!
   
by 아린 [2013.05.03 20:38:50]
:v_int  변수에 찾고싶은 순서를 입력하시면 됩니다.

WITH t1(num, test) AS(
SELECT 8,  '' FROM dual UNION ALL
SELECT 7, 'y' FROM dual UNION ALL
SELECT 6,  '' FROM dual UNION ALL
SELECT 4,  '' FROM dual UNION ALL
SELECT 5,  '' FROM dual UNION ALL
SELECT 3,  '' FROM dual UNION ALL
SELECT 2,  '' FROM dual UNION ALL
SELECT 1,  '' FROM dual
)
SELECT MAX(DECODE(ROWNUM, :v_int, num)) num
  FROM (SELECT num
          FROM t1
         WHERE num < (SELECT num 
                        FROM t1
                       WHERE test = 'y')
         ORDER BY num DESC
        )

by 마숑 [2013.05.03 20:44:59]

감사합니다~

혹시 rownum 을 이용하지 않고 하는방법도 있을까요

예를 들어 데이터를가져올 index 값이

앞에 따로있을경우 이런식으로 하였을때 rownum 이 제대로먹히는지..


by 아린 [2013.05.03 20:50:23]
num 컬럼이 정렬순서가 아닌가요?
정렬순서가 아니면 ORDER BY 부분에 정렬순서를 지정해주세요

WHERE rn = 찾고싶은순서입력

ORDER BY num DESC  => 정렬순서 지정.


SELECT num
  FROM (SELECT num, ROW_NUMBER() OVER(ORDER BY num DESC) rn
          FROM t1
         WHERE num < (SELECT num
                        FROM t1
                       WHERE test = 'y')
        )
 WHERE rn = 3                         

by 손님 [2013.05.04 00:03:28]

감사합니다

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