我有下表,它表示项目的评估。
ITEM REFERENCEDATE VALUATION ------------------------------------------------ A 25/01/2012 25.35 A 26/01/2012 51.35 B 25/01/2012 25.00
编辑:(ITEM,REFERENCEDATE)是唯一索引。
目的是获得一组物料的最新估值。这意味着我正在尝试创建一个将返回类似内容的SQL请求
ITEM REFERENCEDATE VALUATION ------------------------------------------------ A 26/01/2012 51.35 B 25/01/2012 25.00
在进行有关GROUP BY的教程时,我最终尝试了
SELECT A.ITEM, A.VALUATION, MAX(A.REFERENCEDATE) FROM VALUATIONS A GROUP BY A.ITEM
充满希望的是,SQL Server将理解我需要该行的A.VALUATION,以实现当前结果行上表示的ITEM的A.REFERENCEDATE的最大值。
但是,相反,我有此令人不愉快的错误消息:
Column 'VALUATIONS.VALUATION' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
如何指示应使用达到REFERENCEDATE最大值的VALUATION?
注意:我需要至少在Oracle和SQL Server上有效的解决方案
编辑: 谢谢大家的帮助。我被困在一个漏洞中,试图只使用一个SELECT … GROUP BY请求。现在,我看到有两种方法可以围绕同一想法进行阐述:
任何人都可以提供一个理由(或一个理由的指针)来优先于另一个吗?
select a.item, a.valuation, a.referencedate from valuations a join (select a2.item, max(referencedate) as max_date from valuations a2 group by a2.item ) b ON a.item = b.item and a.referencedate = b.max_date