本当に単純なクエリのように見えますが、明らかな何かが欠けているに違いありません。このシナリオはかなり一般的だと思います。
製品を格納するテーブルとトランザクションを格納する別のテーブルがあります。トランザクションテーブルには、セールスマンに関する情報が含まれています。次に、すべての製品をリストし、この製品を最後に販売したセールスマンのIDを含むレポートを作成する必要があります。
私は次のような簡単なクエリを試しました:
select id、product_name、(select salesman_id from(select salesman_id from trans where product_id = a.id order by trans_date desc)where rownum = 1)salesman_id from products a
このクエリにより、a.idに無効な識別子が表示されました。
そのため、ネットを検索した後、LATERAL句を追加しようとしました。次のように
select id、product_name、salesman_id from products a、LATERAL(select salesman_id from(select salesman_id from trans where product_id = a.id order by trans_date desc)where rownum = 1)
しかし、このクエリは私に不完全なSQLステートメントを与えます。
単一のクエリでこれを実現する簡単な方法はありますか?
select id, product_name, salesman_id from
(select p.id, p.product_name, t.salesman_id, row_number() over(partition by p.id order by t.trans_date desc) rw
from products p left join trans t on t.product_id = p.id
) where rw = 1;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加