对于令人困惑的问题标题深表歉意,但我不确定如何描述手头的问题。
我在 Oracle 9i 中有两个表:
Pricing
-------
SKU
ApplicableTime
CostPerUnit
Inventory
---------
SKU
LastUpdatedTime
NumberOfUnits
定价
包含在特定 Unix 时间对每个特定 SKU 项目成本的增量更新。例如,如果我有记录:
SKU ApplicableTime CostPerUnit
------------------------------------
12345 1000 1.00
12345 1500 1.50
,则商品 12345 在 1000 到 1500 之间的任何时间为每件 1.00 美元,在 1500 之后的任何时间为 1.50 美元。
Inventory
包含 SKU、上次更新时间和单位数量。
我想要做的是构造一个查询,以便对于 Inventory
中的每一行,我根据 SKU 连接两个表,我找到 Pricing.ApplicableTime 的最大值
不大于 Inventory.LastUpdatedTime
,从 Pricing
获取该特定记录的 CostPerUnit
,并计算 TotalCost = CostPerUnit * NumberOfUnits
:
SKU TotalCost
-----------------------------------------------------------------------------------
12345 (CostPerUnit at most recent ApplicableTime <= LastUpdatedTime)*NumberOfUnits
12346 <same>
... ...
我该怎么做?
最佳答案
SELECT *
FROM
(select p.SKU,
p.ApplicableTime,
p.CostPerUnit*i.NumberOfUnits as cost,
row_number over (partition by p.SKU order by p.ApplicableTime desc) as rnk
from Pricing p
join
Inventory i on (p.sku = i.sku and i.LastUpdatedTime > p.ApplicableTime)
)
where rnk=1
关于sql - 如何连接最大值不大于列的另一个值的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572126/