アイテムの評価を表す次の表があります。
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サーバーが、現在の結果行に表示されているITEMのA.REFERENCEDATEの最大値を実現する行にA.VALUATIONが必要であることを理解してくれることを期待しています。
しかし、代わりに、この不快なエラーメッセージが表示されます。
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とSQLServerで機能するソリューションが必要です
編集:あなたの助けをみんなに感謝します。SELECT ...GROUPBYリクエストを1つだけ使用して逃げようとして穴に閉じ込められました。今、私は同じ考えを明確にする2つのアプローチがあることがわかります。
- すべてのアイテム/最大(日付)のカップルを返す他の独立したリクエストの結果を使用してJOINを作成する
- サブリクエストを使用すると、アイテムごとに異なる値を持つwhere句が生成されます。
誰かが一方を他方よりも好む理由(または理由へのポインタ)を提供できますか?