次のレコードを持つ tracker という名前のテーブルがあるとします。
issue_id | ingest_date | verb,status
10 2015-01-24 00:00:00 1,1
10 2015-01-25 00:00:00 2,2
10 2015-01-26 00:00:00 2,3
10 2015-01-27 00:00:00 3,4
11 2015-01-10 00:00:00 1,3
11 2015-01-11 00:00:00 2,4
次の結果が必要です
10 2015-01-26 00:00:00 2,3
11 2015-01-11 00:00:00 2,4
このクエリを試しています
select *
from etl_change_fact
where ingest_date = (select max(ingest_date)
from etl_change_fact);
しかし、これは私だけを与えます
10 2015-01-26 00:00:00 2,3
この記録。
しかし、すべての一意のレコード(change_id)が必要です
(a) max(取り込み日) AND
(b) 動詞列の優先度は (2 - 最初の優先度、1 - 2 番目の優先度、3 - 最後の優先度)
したがって、次の結果が必要です
10 2015-01-26 00:00:00 2,3
11 2015-01-11 00:00:00 2,4
効率的にクエリを実行するのを手伝ってください。
PS : 分散コンピューティングのセットアップで「配布キー」として設定するため、ingest_date のインデックスを作成しません。私はデータ ウェアハウスとクエリの初心者です。
したがって、TB サイズの DB をヒットするための最適化された方法を教えてください。