SQL根据订单日期查找活动成本
我的公司使用标准成本计算法,我想知道在订购物品时找到与之相关的成本的最佳方法是什么?我使用SQL来提取数据,而不是将数据放入表中 例如,我有ABC项目的成本:SQL根据订单日期查找活动成本,sql,oracle,Sql,Oracle,我的公司使用标准成本计算法,我想知道在订购物品时找到与之相关的成本的最佳方法是什么?我使用SQL来提取数据,而不是将数据放入表中 例如,我有ABC项目的成本: Update Date Cost 12/26/2017 $40 2/1/2017 $43 12/27/2016 $39 Order Date Price 1/1/2018 $80 1/1/2017 $84 在另一个表中,我有AB
Update Date Cost
12/26/2017 $40
2/1/2017 $43
12/27/2016 $39
Order Date Price
1/1/2018 $80
1/1/2017 $84
在另一个表中,我有ABC项目的订单:
Update Date Cost
12/26/2017 $40
2/1/2017 $43
12/27/2016 $39
Order Date Price
1/1/2018 $80
1/1/2017 $84
以下是数据应该如何汇集在一起,但我不确定如何:
Order Date Price Cost
1/1/2018 $80 $40
1/1/2017 $84 $39
谢谢你的建议 您可以使用相关子查询执行此操作:
select o.*,
(select c.cost
from costs c
where c.updatedate <= o.orderdate
order by c.updatedate desc
fetch first 1 row only
) as cost
from orders o;
这使用ANSI标准语法。数据库将结果限制为一行的方式可能有所不同
编辑:
在Oracle的早期版本中,有多种方法可以实现这一点。这里有一种方法:
select o.*,
(select max(c.cost) keep (dense_rank first order by c.updatedate desc)
from costs c
where c.updatedate <= o.orderdate
) as cost
from orders o;
可以使用相关子查询执行此操作:
select o.*,
(select c.cost
from costs c
where c.updatedate <= o.orderdate
order by c.updatedate desc
fetch first 1 row only
) as cost
from orders o;
这使用ANSI标准语法。数据库将结果限制为一行的方式可能有所不同
编辑:
在Oracle的早期版本中,有多种方法可以实现这一点。这里有一种方法:
select o.*,
(select max(c.cost) keep (dense_rank first order by c.updatedate desc)
from costs c
where c.updatedate <= o.orderdate
) as cost
from orders o;
在订单中添加成本列,在创建订单时插入订单成本。不要试图追溯计算。用您正在使用的数据库标记您的问题。在订单中添加成本列,在创建订单时插入订单成本。不要试图追溯计算这个问题。用你正在使用的数据库标记你的问题。谢谢你的回答。非常有用。如前所述,它在Order By语句之前抛出缺少右括号的错误。一些研究表明,它不喜欢order语句,因为它是为了选择一行而编写的。有什么想法吗?@ERKSMTY。Oracle支持仅从Oracle 12开始获取前1行。感谢您的回复。非常有用。如前所述,它在Order By语句之前抛出缺少右括号的错误。一些研究表明,它不喜欢order语句,因为它是为了选择一行而编写的。有什么想法吗?@ERKSMTY。Oracle支持仅从Oracle 12中开始获取前1行。