1

これはSQLのdense_rank関数に関する質問です。私は答えを見つけようとしてインターネットを研究してきました。いくつかのバージョンを試しましたが、何も機能していません。これは私が抱えている問題です: 誰かが 7/13 にプログラムを変更しました。7 月 14 日以降、このプログラムは給与フィールドを一掃します。= 0 である最新のレコードを見つけ、次に > 0 である 2 番目に新しいレコードを見つける必要があります。これは、私が試したコードの 1 つです。

(SELECT contract_nbr, 
        business_unit, 
        ymdeff, 
        ymdend, 
        ymdtrans, 
        void, 
        salary, 
        Dense_rank() 
          OVER ( 
            partition BY contract_nbr 
            ORDER BY ymdend, salary DESC) 
 FROM   (SELECT DISTINCT contract_nbr, 
                         business_unit, 
                         ymdeff, 
                         ymdend, 
                         ymdtrans, 
                         void, 
                         salary 
         FROM   contract_span 
         WHERE  business_unit = 'KA' 
                AND ymdtrans > 20130714 
                AND contract_nbr = 'XXXX')) 

これらは結果です。下の 2 行だけが必要であることを除けば、見栄えは良いです。最後の 2 行だけを受け取る方法はありますか? YMDEND は常に 99991231 とは限らないため、そのフィールドを使用できません。

CONTRACT_NBR BUSINESS_UNIT YMDEFF YMDEND YMDTRANS VOID SALARY
XXXX KA 20130101 20130531 20130725 V 129300
XXXX KA 20130101 20130531 20130725 0
XXXX KA 20130601 99991231 20130725 V 129300
XXXX KA 20130601 99991231 20130725 0
4

1 に答える 1