私は2つのタイプの顧客であるRegular - R
と 'Corporate-C`を食料品店に持っていて、それらには日付に基づく価格の合意があるとします。サンプルデータは次のようになります。句による特定の注文Oracle
Type(C/R) CustID From Date Cost
C 1/11/2017 10
C 1 1/11/2017 12
1/11/2017 14
R 1/11/2017 9
C 1 10/11/2017 11
C 11/11/2017 15
表からはType
、Custid
は必須ではありません見ることができます。私のレートピッカーは、日付からの入力から最大一致する列と一致し、適用するためのコストを与えます。
サンプル入力:(入力は常にタイプ、お客様IDと日付からになります)
Case 1: Type - c,Cust ID - 1, dealdate(fromdate) - 2/11/2017
出力:Row number 2 with price 12
Case 2: Type - C, Cust ID - 2,dealdate(fromdate) - 2/11/2017
出力:Row number 1 with price 10
Case 3: Type - C, Cust ID - 2,dealdate(fromdate) - 12/11/2017
出力:Row number 6 with price 15
私の出力は、最初の最大のマッチング列にマッチしますし、それが一致する列が日付からより高い優先度を持っている(しかし、はい、それは有効期間であることを有することを意味する有効な日付をチェックします)。
私のアプローチ:
select * from (
select row_number() over(partition by partition_column order by
from_date desc,type,custid) rn,a.* from (
select *,'1' as partition_column from rate
where from_date <= :d_date and (type = :type or type is null) and
(custid = :custid or custid is null)) a) where rn=1;
私は望ましい結果を得ていないのです。誰も助けてください。
CUST ID = 2はあなたのサンプルデータに欠けていますか? – Ronnis
cust id = 2がないことは意味しません。つまり、私はcust id 2と特別な契約を結んでいません。そして、行番号1は価格10で選択されます。ヌルは誰にでも使用できることを象徴しています。値はその特定の人のみを意味します。 thanks mate。 – Abhishek