Sql 获取每个项目的最新价格
我有一张桌子:Sql 获取每个项目的最新价格,sql,ms-access,greatest-n-per-group,Sql,Ms Access,Greatest N Per Group,我有一张桌子: ItemID PurchaseDate Price 001 03/17/2013 19.00 002 03/17/2013 14.00 001 03/18/2013 13.00 002 03/18/2013 15.00 001 03/19/2013 17.00 003 03/19/2013 19.00 我需要编写一个SQL查询来获取每个ItemID对应于最新PurchaseDate的Price。 表中的条目不一定按日期顺序输入 像这样: ItemID
ItemID PurchaseDate Price
001 03/17/2013 19.00
002 03/17/2013 14.00
001 03/18/2013 13.00
002 03/18/2013 15.00
001 03/19/2013 17.00
003 03/19/2013 19.00
我需要编写一个SQL查询
来获取每个ItemID
对应于最新PurchaseDate
的Price
。
表中的条目不一定按日期顺序输入
像这样:
ItemID PurchaseDate Price
001 03/19/2013 17.00
002 03/18/2013 15.00
003 03/19/2013 19.00
子查询背后的思想是,它分别为每个
ItemID
获取最新的PurchaseDate
。如果子查询的结果在两个条件下匹配:ItemID
和PurchaseDate
,则子查询的结果将在表上重新联接
SELECT a.*
FROM TableName a
INNER JOIN
(
SELECT ItemID, MAX(PurchaseDate) max_date
FROM TableName
GROUP BY ItemID
) b ON a.ItemID = b.ItemID AND
a.PurchaseDate = b.max_date
子查询背后的思想是,它分别为每个
ItemID
获取最新的PurchaseDate
。如果子查询的结果在两个条件下匹配:ItemID
和PurchaseDate
,则子查询的结果将在表上重新联接
SELECT a.*
FROM TableName a
INNER JOIN
(
SELECT ItemID, MAX(PurchaseDate) max_date
FROM TableName
GROUP BY ItemID
) b ON a.ItemID = b.ItemID AND
a.PurchaseDate = b.max_date
你为什么这么快P@JW不幸的是,Access 2010中没有go:“联接操作中出现语法错误”。@GordThompson它在Access中工作。只需将“TableName AS a”放在第一个FROM子句中,将“TableName AS b”放在第二个FROM子句中,哦,“MAX(PurchaseDate)作为MAX_date”。给了JW支票,因为他的回答更快,我使用了他的询问。谢谢JW。记录在案:我提交了一个对此答案的编辑,以修复语法,使其在Access中实际工作,但该编辑显然被拒绝。你为什么这么快P@JW不幸的是,Access 2010中没有go:“联接操作中出现语法错误”。@GordThompson它在Access中工作。只需将“TableName AS a”放在第一个FROM子句中,将“TableName AS b”放在第二个FROM子句中,哦,“MAX(PurchaseDate)作为MAX_date”。给了JW支票,因为他的回答更快,我使用了他的询问。谢谢JW。请注意:我提交了一个对此答案的编辑,以修复语法,使其在Access中实际工作,但该编辑显然被拒绝。@JW,公共表表达式?请你详细说明一下好吗?这里。你真的测试过你的查询吗?是的!MS-ACCESS不允许
存在
查询。此处:。我用子句对进行编码,就是为了在一个查询中完成所有这一切,它在Oracle中工作。Alin我可以使用主SELECT
查询作为参考。逻辑是完美的。@是的,存在访问支持,但不支持。主选择查询确实在Access中工作。你可以考虑编辑你的答案来澄清,在这种情况下,我会投票赞成。请你详细说明一下好吗?这里。你真的测试过你的查询吗?是的!MS-ACCESS不允许存在
查询。此处:。我用
子句对进行编码,就是为了在一个查询中完成所有这一切,它在Oracle中工作。Alin我可以使用主SELECT
查询作为参考。逻辑是完美的。@是的,存在访问支持,但不支持。主选择查询确实在Access中工作。你可以考虑编辑你的答案来澄清,在这种情况下,我会投票。