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中工作。你可以考虑编辑你的答案来澄清,在这种情况下,我会投票。