これは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