我有下表,代表物品的估价。
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 服务器会理解我需要 A.VALUATION 用于实现当前结果行上表示的项目的 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 请求就可以逃脱。现在我看到有两种方法可以表达相同的想法:
- 使用其他独立请求的结果进行 JOIN,该请求将返回所有 item/max(date) 对
- 在 where 子句中使用子请求会导致每个项目具有不同的值。
任何人都可以提供一个理由(或指向一个理由的指针)来更喜欢另一个吗?