답변:
첫 번째로 선택한 행만 원하는 경우 다음을 수행 할 수 있습니다.
select fname from MyTbl where rownum = 1
분석 함수를 사용하여 최상위 x를 주문하고 가져갈 수도 있습니다.
select max(fname) over (rank() order by some_factor) from MyTbl
SELECT *
FROM (SELECT * FROM MyTbl ORDER BY Fname )
WHERE ROWNUM = 1;
top X
그것을 바꿀 수 있다는 메모를 추가 할 수 있습니다WHERE ROWNUM <= X
함께 오라클 12C (6 월 2013), 당신은 다음과 같이 사용할 수 있습니다.
SELECT * FROM MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
OFFSET 0 ROWS
분명히 필요하지 않습니다. 당신은 FETCH NEXT 1 ROWS ONLY
또는 FETCH FIRST ROW ONLY
순서를 사용 하거나 중요 할 수 있습니다. 또는 단지를 사용하는 것과 같습니다 WHERE rownum = 1
. 심지어 OUTER APPLY 명령으로 시도했으며 Ms-SQL의 TOP 함수처럼 작동했습니다.
당신은 사용할 수 ROW_NUMBER()
와 ORDER BY
하위 쿼리 절과의 교환이 열을 사용 TOP N
. 이것은 단계별로 설명 될 수 있습니다.
두 개의 열이 아래 표 참조 NAME
및 DT_CREATED
.
에 관계없이 처음 두 날짜 만 NAME
사용해야하는 경우 아래 쿼리를 사용할 수 있습니다. 논리는 쿼리 안에 작성되었습니다
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
-- Generates numbers in a column in sequence in the order of date
SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
결과
경우에 따라 TOP N
각각에 대해 결과 를 선택해야합니다 NAME
. 이 경우 하위 쿼리에서 절 PARTITION BY
과 함께 사용할 수 있습니다 ORDER BY
. 아래 쿼리를 참조하십시오.
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
--Generates numbers in a column in sequence in the order of date for each NAME
SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
결과
with (select ... ) as
절)는이 문제를 전혀 바꾸지 않으며 CTE는 단지 쿼리를 읽고 지원하는 것을 목표로합니다. 권리? @Sarath Avanavu
사용하다:
SELECT x.*
FROM (SELECT fname
FROM MyTbl) x
WHERE ROWNUM = 1
Oracle9i +를 사용하는 경우 ROW_NUMBER ()와 같은 분석 함수 를 사용할 수 있지만 ROWNUM과 같이 성능이 좋지 않습니다 .
테이블에서 첫 번째 행을 선택하고 테이블에서 한 행을 선택하려면 서로 다른 두 가지 작업이 필요하며 다른 쿼리가 필요합니다. 그렇게하는 방법에는 여러 가지가 있습니다. 그중 4 개는 다음과 같습니다.
먼저
select max(Fname) from MyTbl;
둘째
select min(Fname) from MyTbl;
제삼
select Fname from MyTbl where rownum = 1;
네번째
select max(Fname) from MyTbl where rowid=(select max(rowid) from MyTbl)
나는 같은 문제가 있었고이 솔루션으로 이것을 해결할 수 있습니다.
select a.*, rownum
from (select Fname from MyTbl order by Fname DESC) a
where
rownum = 1
첫 번째 값을 갖기 전에 결과를 주문할 수 있습니다.
행운을 빕니다