很抱歉问题标题让人困惑,但我不确定如何描述手头的问题。
我在Oracle 9i中有两个表:
Pricing
-------
SKU
ApplicableTime
CostPerUnit
Inventory
---------
SKU
LastUpdatedTime
NumberOfUnits
Pricing
包含在特定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
,从CostPerUnit
中获取该特定记录的Pricing
,并计算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/