以下是我们必须提出Oracle查询的方案。如果您能在这里帮助我们查询SQL查询,请告诉我们。
我们必须根据单个表中的3个字段获取数据。
Table name: CS_01 Field names: ID_74 EFF_DATE ID_TYPE
条件如下:
如果两个记录具有相同的ID_74,相同的EFF_DATE但ID_TYPE不同,则应根据以下排名选择ID_TYPE。
WHEN 'DLIC' THEN 1
WHEN 'CAND' THEN 1
WHEN 'STID' THEN 1
WHEN 'PASP' THEN 2
WHEN 'UPAS' THEN 2
WHEN 'MLID' THEN 3
WHEN 'GUAT' THEN 4
WHEN 'MXCN' THEN 4
WHEN 'RAID' THEN 4
WHEN 'VISA' THEN 4
WHEN 'FORN' THEN 5
ELSE 6
例如:如果我们有两个以下的记录 - 则应选择第一个记录
ID_74 EFF_DATE ID_TYPE ID_OCCUR Amount 10 2-Oct-15 DLIC 1 100 10 2-Oct-15 VISA 1 120
示例数据:
ID_74 EFF_DATE ID_TYPE ID_OCCUR Amount 11 3-Oct-15 PASP 1 25 11 2-Sep-15 DLIC 1 35 10 2-Oct-15 VISA 1 120 10 2-Oct-15 DLIC 1 100 9 8-Sep-15 FORN 1 23 9 8-Sep-15 FORN 1 50
场景1:对于ID 11,应选择第一条记录。
场景2:对于ID 10,应选择第二条记录。
场景3:对于ID 9,应选择第一条记录。
请帮忙解决SQL查询问题。我们尝试了dense_rank(),但未根据我们的要求分配排名。
答案 0 :(得分:0)
尽管名称为RANK
和DENSE_RANK
,但您最常使用ROW_NUMBER
进行排名: - )
select
id_74, eff_date, id_type, id_occur, amount
from
(
select
id_74, eff_date, id_type, id_occur, amount,
row_number() over (partition by id_74 order by <your order here>) as rn
from mytable
)
where rn = 1;
所以你要做的就是替换&#34;&lt;你的订单&gt;&#34;使用您的排序顺序,从最佳到最差的顺序记录您的记录。因此,每个id_74的最佳记录得到的rn = 1,只有那些你保留在外部查询中的记录。