如何解决从控制表获取不同产品的最新价格
我有一个控制表,其中按日期跟踪带有物料编号的价格。
id ItemNo Price Date
---------------------------
1 a001 100 1/1/2003
2 a001 105 1/2/2003
3 a001 110 1/3/2003
4 b100 50 1/1/2003
5 b100 55 1/2/2003
6 b100 60 1/3/2003
7 c501 35 1/1/2003
8 c501 38 1/2/2003
9 c501 42 1/3/2003
10 a001 95 1/1/2004
这是我正在运行的查询。
SELECT pr.*
FROM prices pr
INNER JOIN
(
SELECT ItemNo,max(date) max_date
FROM prices
GROUP BY ItemNo
) p ON pr.ItemNo = p.ItemNo AND
pr.date = p.max_date
order by ItemNo ASC
我的价值观低于标准
id ItemNo Price Date
------------------------------
10 a001 95 2004-01-01
6 b100 60 2003-01-03
9 c501 42 2003-01-03
问题是,我的查询是对还是错?虽然我得到了想要的结果。
解决方法
您的查询可以满足您的要求,并且是解决问题的有效方法。
另一种选择是使用相关子查询进行过滤:
select p.*
from prices p
where p.date = (select max(p1.date) from prices where p1.itemno = p.itemno)
此查询的好处是它可以利用(itemno,date)
上的索引。
您还可以使用窗口功能:
select *
from (
select p.*,rank() over(partition by itemno order by date desc) rn
from prices p
) p
where rn = 1
我建议根据您的真实数据对这三个选项进行基准测试,以评估哪种方法效果更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。