2016-04-02 15 views
0

Veritabanımda, ürünlerimde, satın alma tarihlerinde, faturada, faturada ve ürün programlarında 5 tablo var ve bunların şemaları aşağıdakine benzer.Satış tarihinden önce en son alış fiyatını nasıl seçebilirim?

Table: products 
id 
trade_name 

Table: purchase_orders 
id 
product_id 
created 

Table: invoices 
id 
created 

Table invoice_details 
id 
invoice_id 
product_id 
price_id 

Table product_prices 
id 
retail_price 
effective_from 
effective_to 

Ben bir şekilde katılabilir veya faturalarda oluşturulan için purchase_orders oluşturulan kontrol etmek gerektiğini düşünüyorum. Böylece, ilaç kimliği, fatura tarihi ile başladı.

select d.id as drug_id 
     , i.created as invoice_created 
     , dp.retail_price 
from drugs d 
inner join invoice_details id 
     on d.id = id.drug_id 
inner join invoices i 
     on i.id = id.invoice_id 
inner join drug_prices dp 
     on dp.id = id.price_id 

sonraki adım ben bunu çözemedim purchase_orders oluşturulmuş zorunda faturada oluşturulan eşleşen etmektir.

inner join (
      select  drug_id 
        , purchase_price 
        , ISNULL(created, CONVERT(DATETIME, '2015-10-07 01:37:12.370')) as created 
      from  purchase_orders po 
      ) as prepared_po 
      on prepared_po.created <= i.created 

Sattığım her öğe için ne kadar süren satın alma bedeli alabilirim?

;With CTE as (select a.productID, a.saledate, b.price, b.purchasedate 
    , row_number() over (partition by a.productID, a.saledate 
         order by b.purchasedate desc) RN 
from sales a 
left join purchases b 
on a.productID = b.productID and a.saledate >= b.purchasedate 
) 

Select productID, saledate, price, purchasedate 
from CTE where RN = 1 

Temelde,:

+0

Bu soru için downvote aldın niye? –

+0

Bazı örnek verileri ve beklenen sonuçları sorgunuza eklerseniz yardımcı olabilir. – APH

cevap

0

İşte ihtiyacınız mantık basitleştirilmiş versiyonu (tüm aracıyı yapmadan zaten kendini yazdım birleşimler hangi görmek daha kolaydır böylece Sütunlarınızı değiştirildi) Tüm satınalma kayıtlarını satış tarihine kadar almak için katılın, ardından en son bulmak için row_number kullanın.

http://sqlfiddle.com/#!6/a0f68/2/0

İlgili konular