programing

Oracle의 테이블에서 N번째 행 선택

muds 2023. 7. 20. 22:10
반응형

Oracle의 테이블에서 N번째 행 선택

오라클의 테이블에서 N번째 행을 선택하려면 어떻게 해야 합니까?

나는 노력했다.

SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2

하지만 그것은 효과가 없었습니다.도와주세요!

일반적인 답변을 기반으로 합니다.

http://asktom.oracle.com/pls/asktom/f?p=100:11:0 ::::P11_QUESTION_ID:127412348064

select * 
  from ( select a.*, rownum rnum
           from ( YOUR_QUERY_GOES_HERE -- including the order by ) a
          where rownum <= N_ROWS )
 where rnum >= N_ROWS
/

'='과 함께 작동하지 않음(<2 또는 >2로 작동하지만 동일하지는 않음)

할 수 있도록

 SELECT Price from (SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING) WHERE RN = 2

그 이유를 설명하기 위해:

RowNum는 Oracle에서 제공하는 유사 열입니다.SELECT-clause가 처리되는 동안 생성됩니다.WHERE-clause는 SELECT-clause보다 먼저 처리되므로,RowNum아직 올바른 값이 없습니다.

Oracle이 상황에서 예외를 두는 것이 말이 되는지 여부를 논쟁할 수 있지만, 다음과 같은 이유 때문입니다.RowNum여전히 유사 열입니다. 여전히 거기에 있는 것은 유효합니다.

참고: 다음과 혼동하지 마십시오.RowId그건 완전히 다른 이야기야!

중요 편집:

참고로 제가 쓴 것은RowNum에 대해서만 해당됩니다.=,>,>=,IN ()그리고 다른 사람들도.예를 들어 확인하는 경우RowNum < 10당신은 단지 9개의 레코드를 얻습니다!?왜 그런지 모르겠어요!

Select * From
(
    Select Row_Number() OVER (Order by empno) rno, e.* 
    From scott.emp e
)
Where rno in (1, 3, 11)
SELECT PRICE 
FROM (  
  SELECT PRICE,    
  ROWNUM rnum 
  FROM AAA_PRICING
  ORDER BY PRICE ASC
  ) 
WHERE    rnum = 2

Oracle 12 이상에 있는 경우 결과 오프셋 및 fetch 절을 사용할 수 있습니다.

SELECT PRICE FROM AAA_PRICING 
offset 1 rows fetch next 1 rows only
SELECT * FROM
(SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING )
WHERE RN = 2;
select * from (Select Price, rownum as rn from(Select * from AAA_PRICING a order by a.Price))
where rn=2;

가격 란에서 두 번째로 낮은 가격을 제공합니다.두 번째 행만 원하는 경우 Order By 조건을 제거합니다.

ROWNUM고유한 유사 값을 생성하는 유사 열입니다(존재하는 레코드의 수를 기준으로 함)SELECT실행 중 진술 o/p)SELECT이 유사 열이 다음과 함께 지정된 경우WHERE그것의 가치가 되는 조항.1결석으로따라서 지정된 비교 연산자에 따라 동작합니다.

SELECT * FROM (
           SELECT ROWNUM RN, E.*
           FROM Emp E
          )
WHERE RN = 10;
select * 
From (select PRICE, DENSE_RANK() over(ORDER BY PRICE desc) as RNO
      From AAA_PRICING
     ) t where RNO=2;
select a.*, rownum rnum
           from ( select * from xyz_menu order by priority desc) a
          where rownum < 5 ;

xyz_priority desc에서 *를 선택합니다.

가상 테이블 생성 및 가상 테이블에서 행 번호 정의

참고: 오라클의 경우

문제가 해결되었습니다!

Oracle에서 두 번째 행을 선택하는 방법

select SEN_NO,ITEM_NO from (select * from master_machine where 
sen_no ='BGCWKKL23'  and rownum <=2 order by 
rownum desc,timestamp asc) where rownum <=1

감사해요!

언급URL : https://stackoverflow.com/questions/4509167/select-nth-row-from-a-table-in-oracle

반응형