在Oracle SQL查询中需要帮助

时间:2015-10-07 07:58:58

标签: sql oracle

以下是我们必须提出Oracle查询的方案。如果您能在这里帮助我们查询SQL查询,请告诉我们。

我们必须根据单个表中的3个字段获取数据。

Table name: CS_01
Field names:
ID_74
EFF_DATE
ID_TYPE

条件如下:

  1. 应根据最大值(EFF_DATE)选择记录。
  2. 如果两个记录具有相同的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
    
  3. 例如:如果我们有两个以下的记录 - 则应选择第一个记录

    ID_74   EFF_DATE    ID_TYPE ID_OCCUR    Amount
    10  2-Oct-15    DLIC    1   100
    10  2-Oct-15    VISA    1   120
    
    1. 如果所有3个字段(ID_74,EFF_DATE,ID_TYPE)相同,则应选择显示在顶部的记录。
    2. 示例数据:

      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(),但未根据我们的要求分配排名。

1 个答案:

答案 0 :(得分:0)

尽管名称为RANKDENSE_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,只有那些你保留在外部查询中的记录。