【发布时间】:2015-04-16 09:00:10
【问题描述】:
我正在尝试获取表中每篇文章的最新价格,然后我想将此价格放入另一个表中,其中文章 ID 等于该价格的文章 ID。我认为通过执行以下 SQL 语句,我已经正确地获得了“每组获得最大 n”部分:
SELECT item_number, price_date, price
FROM orderline AS t1
INNER JOIN(
SELECT item_number, MAX(pricedate) AS price_date
FROM orderline
GROUP BY item_number) AS t2
ON t1.item_number = t2.item_number AND t1.price_date = t2.price_date
这给了我一个包含 item_number(也就是商品 ID)、价格日期和价格的表格。
但现在我只想获取每件商品的价格,并将其放入另一个表中,例如“itemprices”。包含列“item_id”和“价格”。
但问题是我无法使用更新语句访问结果集中的两行。我想使用WITH 语句,它允许我访问结果集中的两列。我只会调用“WITH 表”,例如“latestPrice”,然后就做
UPDATE itemprices
SET itemprices.price = latestPrice.price
WHERE itemprices.item_id = latestPrice.item_number
但遗憾的是,WITH 语句不能与SELECT 以外的任何其他内容一起使用。所以我需要改变我的方法。有什么想法吗?
提前致谢!
编辑:我正在使用 DB2,版本:v5r4m0。该平台显然有很多名称,例如 AS/400、iSeries、i5 或 IBM i。
【问题讨论】:
-
哪个 dbms? (解决方案可能因产品而异......)
-
查看我的编辑。那是你想要的吗?
-
很遗憾,哪个版本的 DB2(和平台)?它们之间有很大的差异。即使在支持 CTE 作为
UPDATE一部分的数据库中,它仍然充当常规表引用(如SELECT),因此您仍然必须加入它 - 您的示例解决方案不是有效的语法。哦,与常规子查询相比,CTE 的唯一好处是您可以多次加入它。使用ROW_NUMBER()获得“顶”行(单次通过表格),您可能也有更好的运气。 -
版本:v5r4m0。平台,显然有很多名称:AS/400、iSeries、i5 或 IBM i。
-
这是一个无法解决的问题(或者只是一个难以破解的难题)??在过去的几天里,我做了很多不同的 SQL 练习,希望它能帮助我理解如何处理这个问题。但我还没有到任何地方。
标签: sql sql-update db2 inner-join greatest-n-per-group