sql - 如何连接最大值不大于列的另一个值的两个表

标签 sql database oracle

对于令人困惑的问题标题深表歉意,但我不确定如何描述手头的问题。

我在 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/

相关文章:

database - Neo4j 用户定义过程的缓存

php - Laravel orwhere 和 whereBetween 查询不能一起工作

oracle - 如何在 Oracle 的 PL/SQL 中定义全局变量?

sql - 在 postgres 中从复合类型转换到复合类型

mysql - 如何使用 SQL 将矩阵转换为可用的表

php - 显示数据库中特定数量的字母

甲骨文分析 : using LAG values in calculation?

database - 删除行 : . 时出现 Oracle 错误 .. 正在发生变异,触发器/函数可能看不到

php - 将数据移动到新表并添加新数据

php - 获取一年中每个月的总金额