複数のテーブルからデータを取得する、かなり複雑な Oracle クエリがあります。結合の 1 つで、最高のレコードがあれば、それが欲しいです。したがって、左外部結合。開始日フィールドがあるため、ほとんどのレコードでは、最大開始日を取得すると最高のレコードが得られます。ただし、時折、開始日が同じレコードが存在することがあります。その場合、ステータス フィールドもあります。ただし、最適なステータス値は最小でも最大でもありません。'20' が最適、'05' または '40' が適切、'70' が最悪です。複数のレコードが返されたときに最適なオプションを見つけるようにクエリを設定するにはどうすればよいですか?
したがって、次のデータがある場合
Table1 Table2
ID otherData ID date status otherData
1 stuffa 1 jan-1-13 20 stuff93
2 stuff3
3 stuff398 3 jan-2-13 20 stuff92
3 jan-2-13 70 stuff38
3 dec-3-12 20 stuff843
次のクエリを実行して取得できます。
1 stuffa jan-1-13 20 stuff93
2 stuff3
3 stuff398 jan-2-13 20 stuff92
現在、私のクエリは次のとおりで、70 ステータスの 2 番目のレコード 3 を取得します。
select *
from table1 t1
left outer join
(select *
from table2 t2a
where t2a.date = (select max(t2b.date)
from table2 t2b
where t2b.id = t2a.id)
) t2
on (t2.id = t1.id)
selectステートメント内で順序付けられた列挙などを設定する方法はありますか? 何かのようなもの
rank() over ( partition by status order by ('20','05','40','70') rank