Sql 在价目表中查找最新价格
我有一个表,有Item、Price和Price-Date列。我需要做的是只过滤掉旧的价格,只显示每个项目的最新价格。我使用的是MS Access 2007,需要参考我正在编写的一些VBA中最新的价格,在我的研究中,我找不到一种方法来编程访问数据透视表数据,以便在数据库中的其他地方为客户定价 例子: 桌子Sql 在价目表中查找最新价格,sql,vba,ms-access,Sql,Vba,Ms Access,我有一个表,有Item、Price和Price-Date列。我需要做的是只过滤掉旧的价格,只显示每个项目的最新价格。我使用的是MS Access 2007,需要参考我正在编写的一些VBA中最新的价格,在我的研究中,我找不到一种方法来编程访问数据透视表数据,以便在数据库中的其他地方为客户定价 例子: 桌子 项目|价格|价格日期您可以使用相关子查询: select t.* from t where t.pricedate = (select max(t2.pricedate)
项目|价格|价格日期您可以使用相关子查询:
select t.*
from t
where t.pricedate = (select max(t2.pricedate)
from t as t2
where t2.item = t.item
);
一个选项使用子查询查找每个项目的最新价格:
SELECT t1.Item, t1.Price, t1.PriceDate
FROM yourTable t1
WHERE t1.PriceDate = (SELECT MAX(t2.PriceDate) FROM yourTable t2 WHERE t2.Item = t1.Item);
这比使用MAX函数更有效:
SELECT Item, Price, PriceDate
FROM customer_pricing t1
WHERE NOT EXITS(
SELECT *
FROM customer_pricing t2
WHERE t1.item = t2.item
AND t1.PriceDate < t2.PriceDate
)
这个解决方案是由@dewey提出的,是
SELECT t1.item, t1.unit_price1, t1.effect_date, t1.site_ref
FROM dbo_itemprice_mst_all AS t1
WHERE (((t1.site_ref)="MED" Or (t1.site_ref)="CRD") AND ((Exists (SELECT *
FROM dbo_itemprice_mst_all t2
WHERE t1.item = t2.item
AND t1.effect_date < t2.effect_date
))=False))
ORDER BY t1.item;
样本数据和所需结果将有助于在此选择dbo_itemprice_mst_all.*从dbo_itemprice_mst_all.effect_date=选择maxdbo_itemprice_mst_all.effect_日期从dbo_itemprice_mst_all作为dbo_itemprice_mst_all.itemprice_mst_all.item=dbo_itemprice_mst_all.itemprice_mst_all.itemprice_;我使用了上面的方法,它只返回两行。也许我搞错了什么,更新了帖子以包含代码。你的代码1看起来很像这个代码,而代码2与你问题中的数据不匹配。谢谢。这解决了问题,而且速度很快。@dewey。你有证据表明这比使用max更快吗?花点时间读一读:如果一个答案解决了你的问题,你应该点击左边的复选标记接受它。