2015-10-07 198 views
-3

以下是我們必須提出Oracle查詢的情景。請讓我們知道您是否可以在這裏幫助我們使用SQL查詢。在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 
    

例如:如果我們有下面2以下紀錄然後第一個記錄應選擇

 
ID_74 EFF_DATE ID_TYPE ID_OCCUR Amount 
10 2-Oct-15 DLIC 1 100 
10 2-Oct-15 VISA 1 120 
  • 如果所有3個字段(ID_74,EFF_DATE, ID_TYPE)是相同的,那麼應該選擇頂部出現的記錄。
  • 樣本數據:

     
    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 
    

    Scenario1:對於ID 11第一記錄應該被選中。

    情景2:對於ID 10,應選擇第二條記錄。

    場景3:對於ID 9應該選擇第一個記錄。

    你可以請SQL幫助查詢。我們嘗試了dense_rank(),但排名沒有按照我們的要求進行分配。

    +2

    也許SO應該是編碼服務;) – lad2025

    +1

    請發佈您嘗試過的SQL查詢 –

    回答

    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; 
    

    因此,所有你需要做的就是「這裏<您的訂單>」替換爲您的排序順序,其將您的記錄從最好到最差排序。因此,每個id_74的最佳記錄get的rn = 1,並且只保留在外部查詢中的那些記錄。