2016-03-23 28 views
2

Sadece giriş tarihinin beg_date ile end_date arasında olduğu satırı seçmek istiyorum, ancak bunun doğru olabileceği birden çok satır olduğu için, varsa en fazla son_tarihi seçmek istiyorum birden çok satır. Aşağıdaki bilgilerle ilk satırın sadece tarihin 2. satırın beg_date ve end_date arasında olmasına rağmen seçilebilmesini istiyorum.Benzersiz değerleri bulmak için nvl ve max öğelerini kullanma

Ayrıca max işlevini kullandığımda, null değerini seçebilirim ve end_date boş olduğunda grp_id döndürülmez. Muhtemelen bir yerde nvl işlevini kullanacağım, ama emin değilim.

Customer_Nbr: 20080909

Tarihi:

Customer_Nbr Grp_Id Beg_Date End_Date 
12345689  9  21-MAY-95 24-FEB-97 
12345689  9  21-MAY-95 24-FEB-96 
12345689  9  27-JUN-04 null 

25-Haziran-95 Şimdiye kadar bu boş olmayan bir end_date değeri elde etmek çalışır. u analitik işlevi üzerinde kullanırsanız

SELECT grp_id 
    FROM table1 
    WHERE customer_nbr = '12345689' 
    AND to_date('06/27/2004','MM/DD/YYYY') 
    BETWEEN beg_date AND nvl(end_date,to_date('12/31/9999','MM/DD/YYYY')); 

cevap

2
SELECT grp_id 
    FROM (SELECT grp_id, MAX(end_date) over(PARTITION BY 1) AS max_end_date, 
       end_date 
      FROM table1 
      WHERE customer_nbr = '12345689' 
      AND to_date('06/27/2004', 'MM/DD/YYYY') BETWEEN beg_date AND 
       nvl(end_date, to_date('06/27/2004', 'MM/DD/YYYY'))) 
WHERE end_date = max_end_date 

Sen seçeneğini her satırda max_end bilmek gerek (bölme ..) u() overy satırda aynı sonucu fonksiyon ve sonra yalnızca end_date aracılığıyla filtre max var = max_end_date

(NVL fonksiyonu aynı tarafından ve giriş tarihini 2004/06/27 zorunluluk)

0

Bu kullanabilirsiniz:

nerede başlangıç_tarihi ile NVL (end_date, tarih) arasındaki tarih

İlgili konular