276

次の方法を教えてください。

select top 1 Fname from MyTbl

Oracle 11gでは?

4

9 に答える 9

288

最初に選択した行だけが必要な場合は、次のことができます。

select fname from MyTbl where rownum = 1

分析関数を使用して、上位 x を並べ替えて取得することもできます。

select max(fname) over (rank() order by some_factor) from MyTbl
于 2010-08-10T17:13:06.227 に答える
183
SELECT *
  FROM (SELECT * FROM MyTbl ORDER BY Fname )
 WHERE ROWNUM = 1;
于 2010-08-10T17:13:26.457 に答える
13

サブクエリの句で使用ROW_NUMBER()し、この列を の代わりに使用できます。これは段階的に説明できます。ORDER BYTOP 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;

結果

ここに画像の説明を入力

于 2015-11-06T04:59:01.703 に答える
11
select * from (
    select FName from MyTbl
)
where rownum <= 1;
于 2010-08-10T17:13:22.760 に答える
6

使用する:

SELECT x.*
  FROM (SELECT fname 
          FROM MyTbl) x
 WHERE ROWNUM = 1

Oracle9i+ を使用している場合、ROW_NUMBER() などの分析関数の使用を検討できますが、 ROWNUM ほどうまく機能しません

于 2010-08-10T17:31:21.347 に答える
3

テーブルから最初の行を選択することと、テーブルから 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)
于 2014-03-12T15:37:49.203 に答える