我有一个相当复杂的 Oracle 查询,从多个表中获取数据。在其中一个连接中,我想要最好的记录,如果有的话。因此,左外连接。有一个开始日期字段,因此对于大多数记录,获取最大开始日期将使我获得最佳记录。但是,偶尔会有记录具有相同的开始日期。在这种情况下,还有一个状态字段。但是,最佳状态值不是最小值或最大值。“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
现在,我的查询如下,得到第二条记录 3,状态为 70:
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