私は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. 最も近いクラスの値を取得
- 6. 最も最近の行のMysqlクエリ結合テーブル
- 7. 取得IMG最も近いのdiv
- 8. mysqlは最も一般的な列の値の最近の行を取得します
- 9. 最も近い未訪問ポイントを取得しますか?
- 10. 最も近い値を取得
- 11. word2vec - 最も近い単語を取得
- 12. attr()で最も近い()を取得
- 13. リストに反復して最も近い値を取得
- 14. テーブルフィールドの全量を合計して最新の最終レコードIDを取得
- 15. ハイブを通して、最近のレコードを取得する方法は?ハイブテーブルで
- 16. Linqは日付に最も近いレコードを選択します
- 17. jQueryを使用して、最も近いスパンからテキストを取得します。
- 18. SQLクエリは、最も近い前と次の日付を取得しますか?
- 19. 最も近い入力フィールドの値とIDを取得する
- 20. 最初の一致のみを内部結合と返します
- 21. 2つのテーブルを結合して最も近いタイムスタンプを見つけよう
- 22. 内部結合してグループの最後の行を取得するために結合する
- 23. Excelでのルックアップ関数は最も近い一致ではなく最初の結果を返します
- 24. Doctrineは、最も新しいレコードを最も古いレコードから最新のレコードにソートします。
- 25. 最も近いフィールドと.find関数を使用してテーブルヘッダーフィールドを取得しようとしています
- 26. zoomcallbackで最も近いmin xとmax xデータポイントを取得しますか?
- 27. SQLクエリに最も近いテキスト一致に基づいてテーブルを結合しますか?
- 28. WordPressの順番で合計得点と最も近い数字
- 29. 左の結合クエリでタイムスタンプごとに最新のレコードを取得
- 30. Jquery - 最も近い入力をonclickし、値を取得
@PunterVicky - あなたがOracleで働く場合、複数の参加を使用する他の人に対してGordonのソリューションをテストすることもできます。 Gordonのソリューションは、はるかに効率的(より速く)になるかもしれません。分析機能はかなり標準的ですが、あなたがOracleのために大金を支払う理由は、他のSQLデータベース製品では得られない余計なものです。分析関数は、クエリで時間のかかる結合の数を減らすという特定の目的で導入されました。 – mathguy
ありがとう@Gordon&mathguy。私もこれを試してみましょう! –