かなり複雑な新製品のいわゆる評価プロセスがあります。製品は、さまざまな地域およびアプリケーションで評価されます。各評価ステップの後、製品は新しい結果スコアを取得します。このスコア(0から10の間)は、製品がプロセスのどこまで進んでいるかを示します。各ステップで、同じか増加しますが、減少することはなく、不均一な数値は評価に失敗した製品を示します。最高スコアは製品ステータスと呼ばれます。
startDate(そのステータスを含む)で偶数のステータス(2,4,8,10)を持ち、時間枠のendDateでステータスを持っているすべての製品を選択したくありません。
(また、その時間枠でプロセスに入ったすべての新製品を選択したいのですが、2番目のステートメントで簡単に実行できると思います。)
私が抱えている問題は、両方の初期ステータスを出力に含める方法です。これが私のSQLステートメントです:
SELECT
MyTable.product_id,
MyTable.REGION,
MyTable.SEGMENT,
Max(MyTable.result) AS NEW_STATUS
FROM
MyTable INNER JOIN (
SELECT
product_id,
REGION,
SEGMENT,
Max(result) AS INITIAL_STATUS
FROM
MyTable
WHERE
DATE <= to_date(:startDate)
GROUP BY
product_id, REGION, SEGMENT
HAVING
Max(result) IN(2,4,8,10)
) initial_status ON MyTable.product_id = initial_status.product_id
WHERE
MyTable.DATE <= to_date(:endDate)
GROUP BY
MyTable.product_id,
MyTable.REGION,
MyTable.SEGMENT;
max / group byに影響を与えずに、出力にinitial_statusを含めるにはどうすればよいですか?(オラクルですが、私は専門家ではないので、オラクル固有のものが役立つかもしれません)
編集:
データは1対多の関係にあります。1つの製品、多くの評価。各評価には、Region、segment、result、evaluation_date(およびここでは関係のない他のデータ)があります。ここでいくつかのサンプルデータを非正規化しました:
product_id Region Segment Result date
1 US AB 2 20.05.2012
1 EU TS 4 13.06.2012
1 US AB 4 01.09.2012
234 US AB 2 09.09.2012
日付範囲が2012年8月26日から2012年9月21日までの上記のサンプルの予想出力:
product_id Region Segment Initial_Status New_Status
1 US AB 2 4
1 EU TS 4 4 (this did not change)
234 US AB (null) 2 ( new entry)
私の現在のSQLではそれを達成できないことを私は知っています。特に新しい値を表示します。