create_timeに注文が作成された時刻が含まれていて、最新の注文を持つ100人のクライアントが必要な場合は、次のことができます。
- 最も内側のクエリにcreate_timeを追加します
- 外部クエリの結果を
create_time desc
で並べ替えます -
ROWNUM
を使用して最初の100行をフィルタリングする最も外側のクエリを追加します
クエリ:
SELECT * FROM (
SELECT * FROM (
SELECT
id,
client_id,
create_time,
ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
)
WHERE rn=1
ORDER BY create_time desc
) WHERE rownum <= 100
Oracle12cの更新
リリース12.1で、オラクルは"実際の"Top-Nクエリ
を導入しました。 。新しいFETCH FIRST...
を使用する 構文については、次を使用することもできます:
SELECT * FROM (
SELECT
id,
client_id,
create_time,
ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
)
WHERE rn = 1
ORDER BY create_time desc
FETCH FIRST 100 ROWS ONLY)