从控制表中获取不同产品的最新价格

Posted

技术标签:

【中文标题】从控制表中获取不同产品的最新价格【英文标题】:Getting latest price of different products from control table 【发布时间】:2021-01-08 15:32:57 【问题描述】:

我有一个控制表,其中项目编号的价格是按日期跟踪的。

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

问题是,我的查询是对还是错?虽然我得到了我想要的结果。

【问题讨论】:

【参考方案1】:

您的查询可以满足您的需求,并且是解决您的问题的有效方法。

另一种选择是使用相关子查询进行过滤:

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

我建议根据您的真实数据对这三个选项进行基准测试,以评估哪一个表现更好。

【讨论】:

thanx,我将在我的程序中尝试所有三个以查看结果。

以上是关于从控制表中获取不同产品的最新价格的主要内容,如果未能解决你的问题,请参考以下文章

从 Access VBA 中的表中的记录创建查询

如何从最接近今天的时期获取不同日期时期不同价格的产品的默认价格?

获取每个产品最新的两条线并获取价格和日期

如何从 MYSQL 中的数据透视表中获取最后更新的价格

如何使用 LINQ 从表中获取最新条目?

如果一个表列为空,如何从另一个表中获取值