很抱歉问题标题让人困惑,但我不确定如何描述手头的问题。
我在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/

10-12 18:40