最初に選択した行だけが必要な場合は、次のことができます。
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;
Oracle 12c (2013年6月)では、次のように使用できます。
SELECT * FROM MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
サブクエリの中でROW_NUMBER()
をORDER BY
節と一緒に使用し、この列をTOP N
の代わりに使用することができます。これは段階的に説明できます。
NAME
とDT_CREATED
の2つの列がある下の表を参照してください。
NAME
に関係なく最初の2つの日付だけを取る必要がある場合は、以下のクエリを使用できます。ロジックはクエリ内に書かれています
-- 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;
_ result _
状況によっては、各NAME
に対応するTOP N
の結果を選択する必要があります。そのような場合、サブクエリで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;
_ result _
あなたはのようなことをすることができます
SELECT *
FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
WHERE rownum = 1;
分析関数 _ rank _ および/または DENSE_RANK を使用することもできますが、 _ rownum _ が最も簡単です。
select * from (
select FName from MyTbl
)
where rownum <= 1;
つかいます:
SELECT x.*
FROM (SELECT fname
FROM MyTbl) x
WHERE ROWNUM = 1
Oracle9i +を使用している場合は、ROW_NUMBER()のような分析関数を使用して を見ることができますが、ROWNUM と同じようには実行されません。
テーブルから最初の行を選択することとテーブルから1行を選択することは2つの異なるタスクであり、異なるクエリが必要です。その方法はたくさんあります。そのうちの4つは:
最初
select max(Fname) from MyTbl;
第二
select min(Fname) from MyTbl;
三番
select Fname from MyTbl where rownum = 1;
第4
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
最初の値が一番上になるように、前に結果を注文することができます。
がんばろう