Oracleの構文を使用して、テーブルDUAL
から1行だけ選択します。たとえば、私はこのクエリを実行したいです。
SELECT user
FROM DUAL
... 40レコードあります。しかし、私は1つのレコードしか必要としません。 ...そして、私はそれをWHERE
句なしで実現させたいのです。
Table_nameフィールドに次のようなものが必要です。
SELECT FirstRow(user)
FROM DUAL
あなたはROWNUMを使います。
すなわち。
SELECT user FROM Dual WHERE ROWNUM = 1
http://docs.Oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
私はこの「解決策」がコメントの1つに隠されているのを見つけました。私はしばらくそれを見ていたので、それを少し強調したいのです(まだコメントできないし、そのようなことをすることもできません)。
SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1
[Date]は常にSYSDATEを介して挿入されると想定して、テーブルの最新のエントリから目的の[Column]エントリを表示します。
この構文はOracle 12cで使用可能です。
select * from some_table fetch first 1 row only;
select * from some_table fetch first 1 rows only;
select * from some_table fetch first 10 row only;
select * from some_table fetch first 10 rows only;
^^目的の行の数が複数であるかどうかにかかわらず、行または行(複数)を使用できることを実証したいだけです。
私の知る限りでは、Oracleのdual
テーブルは1行だけの特別なテーブルです。したがって、これで十分です。
SELECT user
FROM dual
oracle DBテーブルの最初の行を取得する方法は3つあります。
1)select * from table_name where rownum= 1
が最善の方法です
2)select * from table_name where id = ( select min(id) from table_name)
3)
select * from
( select * from table_name order by id )
where nownum= 1
次のようにネストしたクエリを使うべきです:
SELECT *
FROM ANY_TABLE_X
WHERE ANY_COLUMN_X = (SELECT MAX(ANY_COLUMN_X) FROM ANY_TABLE_X)
=> PL/SQLでは、 "ROWNUM = 1"はTSQLの "TOP 1"と等しくありません。
そのため、次のようなクエリは使用できません。 Oracleは最初の行を取得するので、次に句の順序を適用します。
Oracleにはlimit 1
条件(MySQL/PostgresSQL)はありません。where rownum = 1
を指定する必要があります。
"FirstRow"は制限事項であるため、where
句ではなくselect
句に配置されます。そしてそれは大名と呼ばれます
select * from dual where rownum = 1;
いずれかの行でうまくいく場合は、
select max(user)
from table;
Where句はありません。
select name, price
from (
select name, price,
row_number() over (order by price) r
from items
)
where r between 1 and 5;
select a.user from (select user from users order by user) a where rownum = 1
最高のパフォーマンスを発揮する別のオプションは次のとおりです。
select a.user
from (
select user,
row_number() over (order by user) user_rank,
row_number() over (partition by dept order by user) user_dept_rank
from users
) a
where a.user_rank = 1 or user_dept_rank = 2
異なるサブセットが必要なシナリオでは、RANK()
を使用することもできますが、グループ化は必要ないため、row_number()
over(...)
も好きです。