次の方法を教えてください。
select top 1 Fname from MyTbl
Oracle 11gでは?
最初に選択した行だけが必要な場合は、次のことができます。
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;
サブクエリの句で使用ROW_NUMBER()
し、この列を の代わりに使用できます。これは段階的に説明できます。ORDER BY
TOP N
NAME
との 2 つの列がある下の表を参照してくださいDT_CREATED
。
に関係なく最初の 2 つの日付のみを取得する必要がある場合は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;
結果
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;
2番
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)