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,:
Bu soru için downvote aldın niye? –
Bazı örnek verileri ve beklenen sonuçları sorgunuza eklerseniz yardımcı olabilir. – APH