サブクエリのヘルプが必要です。 問題を単純化するために
顧客テーブルがあります(一意の顧客のみがいます)
Cust ID, Cust Name
セールステーブルがあります(顧客に対して複数のエントリがあります)
SaleID, CustID, DatePurchase, Amount
すべての顧客を返品したいが、最新の購入のみを表示したい
John Smith 02/05/2018
Jane Smith 02/10/2018
私は誰かに結合を使用したい....
回答 5 件
私は
ROW_NUMBER
を使用します ここに:SELECT CustID, CustName, SaleID, DatePurchase, Amount FROM ( SELECT c.*, s.SaleID, s.DatePurchase, s.Amount, ROW_NUMBER() OVER (PARTITION BY c.CustID ORDER BY s.DatePurchase DESC) rn FROM customer c LEFT JOIN sales s ON c.CustID = s.CustID ) t WHERE t.rn = 1;
販売レコードをまったく持たない顧客は
NULL
を持つことに注意してください 販売ID、購入日、および金額について報告されます。COALESCE
を使用して、これらをプレースホルダーに置き換えることができます 、 必要に応じて。他の回答に加えて、
dense_rank
を使用するオプションもあります 構築します。あなたの場合:
select c.CustID, max(s.DatePurchase) keep (dense_rank FIRST order by s.DatePurchase desc) from customers c LEFT JOIN sales s on s.CustID = c.CustID group by c.CustID;
以下のように簡単なサブクエリを使用することもできます
SELECT c.Cust_Name, s.DatePurchase FROM customer c INNER JOIN sales s INNER JOIN (SELECT Cust_ID, MAX(DatePurchase) dpur FROM sales GROUP BY Cust_ID) s1 ON s1.Cust_ID = s.Cust_ID AND s1.dpur = s.DatePurchase
最新の購入日だけが必要な場合は、
JOIN
を使用してください およびGROUP BY
:SELECT c.CustName, MAX(s.DatePurchase) FROM customer c INNER JOIN sales s ON c.custid = s.custid GROUP BY c.custid, c.custname;
関連記事
- コンポーネントの結果をレンダリングに渡すと、未定義が返されますか?
- c ++ dllimport:関数呼び出しが間違った結果を返します
- SQLエラーORA 01427:サブクエリは、更新ステートメントの結果として複数の行を返します
- mysqlで以下のエラー(サブクエリが複数の行を返す)を修正するにはどうすればよいですか?
- Nodejsにメッセージを送信するPHPカールは結果を返しません
- ZRANGEBYLEXクエリは同じ量の文字カウントに対して異なる結果を返します
- ORA-01427:GROUP BY句で更新しようとすると、単一行の副問合せが複数の行を返します
- 1つの結果を持つQUERY関数は、数式セルの下に値を返します
- サブクエリを含むSQLiteクエリが空を返します
関連した質問
- ORA-04091:表名が変更されています:子テーブルからのトリガーが親テーブルを更新したい場合
- テーブルEMPが変化しているため、トリガー/関数でエラーが表示されない場合があります
- この問題の解決策を見つけてください。 (PL SQLの場合)--------
- 複数の行への区切り文字付きの2つの列
- テーブルに行を追加するための最も適切なロジックに関するヘルプが必要
- pl/sqlの空の値からNULLを取得できません
- 月と年のSQLクエリ
- Oracleで各従業員の2つの従業員テーブルを列ごとに比較する方法
- pl/sqlテーブルを返す関数
- すべてのテーブルOracle内のすべてのテーブルDMLアクティビティを検索するための動的クエリ
OUTER APPLY (Oracle 12c)
を使用できます :代わりに: