「制限する方法」または「最初の行を取得する方法」が何度も投稿されていることは知っていますが、特定の問題の解決策が見つかりません。
ビン番号と数量を含む在庫バランス表があります
行に最高の数量を含むビン # が必要です
実際のクエリはこれよりもはるかに大きく複雑ですが、この例は私が直面している問題を示しています
私が最初にやった
select itemnumber,
(select binnumber from inventory_balance where current_balance = (select max(current_balance) from inventory_balance where inventory_balance.itemnumber = item_table.itemnumber)) as binnumber
from item_table;
これは、数量が最も多い「ビン」が 1 つしかない場合に機能します。
数量が 10 (最高数量) の同じアイテムに 2 つのビンがある場合、サブクエリは 2 行を返し、Oracle エラーをトリガーします。
それから私はこれを試しました:
select
itemnumber,
(select binnumber from (select binnumber from inventory_balance where current_balance = (select max(current_balance) from inventory_balance where inventory_balance.itemnumber = item_table.itemnumber)) where rownum =1) as binnumber
from item_table;
from (...) 内では item_table.itemnumber への参照が無効であるように見えるため、これは機能しません。そうしようとすると、「列名が無効です」というエラーが表示されます。
「OLAP ウィンドウ関数」がデータベースでアクティブ化されていないように見えるため、ROW_NUMBER() を使用できません。