私は2テーブルの顧客&プロファイルに参加しています。どちらの表も特定の列cust_idで結合されています。プロフィールテーブルには、1つ以上のエントリーがあります。私は、両方のテーブルを結合するときに、start_ts(列)によって最新のエントリを選択したいと思います。結果として、私は顧客からの1行の行と、結果セットのプロファイルからの最も最近の行を希望します。このオラクルSQLを行う方法はありますか? (すべてのDBエンジンのために働く)最も最近のレコードを結合の一部として取得します
答えて
私は希望ウィンドウ関数を使用します。
select . . .
from customer c join
(select p.*,
row_number() over (partition by cust_id order by start_ts desc) as seqnum
from profile
) p
on c.cust_id = p.cust_id and p.seqnum = 1;
あなたが同様のプロファイルを持っていない顧客を取得したい場合は、left join
を使用することができます。 @juergen
select
c.*,
p.*
from
customer c inner join
profile p on p.cust_id = c.cust_id and not exists(
select *
from profile
where cust_id = c.cust_id and start_ts > p.start_ts
)
一つの方法は、あなたがデータをフィルタリングするためのデータを選択し、profile
の特定の最大レコードに対して参加したいテーブルを結合することである
select c.*, p.*
from customer c
join profile p on c.cust_id = p.cust_id
join
(
select cust_id, max(start_ts) as maxts
from profile
group by cust_id
) p2 on p.cust_id = p2.cust_id and p.start_ts = p2.maxts
ありがとう:ここ –
"すべてのDBエンジンで動作する"というのは良いことかもしれませんが、悪いことかもしれません。オラクル製品に大きな支出を費やした場合、すべてのDBエンジンで必ずしも利用可能ではないOracle機能を活用することもできます。この場合、分析関数は繰り返し結合より高速なソリューションを提供する可能性があります。 – mathguy
私は同意します....... –
ありがとう@maraca !! –
- 1. LINQ - 最近のレコードの複数の左外部結合のみ
- 2. 内部結合と最大IDで最高のIDを取得
- 3. 内側の最も最近の行を結合する
- 4. jquery - 最も近いdivのIDを取得しますか?
- 5. 最も最近の行のMysqlクエリ結合テーブル
- 6. 取得IMG最も近いのdiv
- 7. word2vec - 最も近い単語を取得
- 8. attr()で最も近い()を取得
- 9. 最も近い値を取得
- 10. ハイブを通して、最近のレコードを取得する方法は?ハイブテーブルで
- 11. テーブルフィールドの全量を合計して最新の最終レコードIDを取得
- 12. Linqは日付に最も近いレコードを選択します
- 13. jQueryを使用して、最も近いスパンからテキストを取得します。
- 14. SQLクエリは、最も近い前と次の日付を取得しますか?
- 15. 2つのテーブルを結合して最も近いタイムスタンプを見つけよう
- 16. 最も近い入力フィールドの値とIDを取得する
- 17. 内部結合してグループの最後の行を取得するために結合する
- 18. 最も近いフィールドと.find関数を使用してテーブルヘッダーフィールドを取得しようとしています
- 19. SQLクエリに最も近いテキスト一致に基づいてテーブルを結合しますか?
- 20. Doctrineは、最も新しいレコードを最も古いレコードから最新のレコードにソートします。
- 21. zoomcallbackで最も近いmin xとmax xデータポイントを取得しますか?
- 22. Jsoup:タグの前にhtmlの最も近いタグを取得します
- 23. TSQL - 日付が自分の値の最も近い行を取得します。
- 24. 最も近いインデックスによるパンダのDataFrame値への結合
- 25. mysqlは最小の日付を取得し、グループとカラムを結合します。
- 26. Excelは最も最近のセルの変更を返します
- 27. 文字列に最も近いものを取得
- 28. Objective-C:ドラッグしたNSViewに最も近いNSViewを取得
- 29. TRテーブル外で最も近い隠し値を取得
- 30. IFNULLの中で最も近い結果を得る
@PunterVicky - あなたがOracleで働く場合、複数の参加を使用する他の人に対してGordonのソリューションをテストすることもできます。 Gordonのソリューションは、はるかに効率的(より速く)になるかもしれません。分析機能はかなり標準的ですが、あなたがOracleのために大金を支払う理由は、他のSQLデータベース製品では得られない余計なものです。分析関数は、クエリで時間のかかる結合の数を減らすという特定の目的で導入されました。 – mathguy
ありがとう@Gordon&mathguy。私もこれを試してみましょう! –