Oracle / SQLのメインクエリでテーブルとの結合を実行しながら、インラインビューを使用してトップnをフェッチするにはどうすればよいですか?

sohail

本当に単純なクエリのように見えますが、明らかな何かが欠けているに違いありません。このシナリオはかなり一般的だと思います。

製品を格納するテーブルとトランザクションを格納する別のテーブルがあります。トランザクションテーブルには、セールスマンに関する情報が含まれています。次に、すべての製品をリストし、この製品を最後に販売したセールスマンの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ステートメントを与えます。

単一のクエリでこれを実現する簡単な方法はありますか?

Multisync
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;
  1. テーブル製品とトランスに参加する
  2. 一部の商品は取引がない場合があります。すべての製品を表示する必要があるため、LEFTJOINが必要です
  3. 分析関数を使用して、各製品の各トランザクションの注文番号(row_number)を計算します(注文番号は各製品の1から始まります)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ