我们有一个相当复杂的新产品评估流程。产品针对不同的区域和应用进行评估。在每个评估步骤之后,产品都会获得一个新的结果分数。这个分数(介于 0 到 10 之间)表示产品在流程中的进展程度。对于每个步骤,它保持不变或增加但从不减少,并且不均匀的数字标记未通过评估的产品。最高分称为产品状态。
我不想选择在 startDate (包括该状态)具有偶数状态(2、4、8、10)的所有产品以及时间范围的 endDate 状态。
(我还想选择在该时间范围内进入流程的所有新产品,但我认为这可以在第二个语句中轻松完成。)
我遇到的问题是如何在输出中包含两个初始状态。这是我的 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个产品,很多评价。每个评估都有一个区域、细分、结果和评估日期(加上这里不相关的其他数据)。这里非规范化一些示例数据:
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
上述样本的预期输出,日期范围从 26.08.2012 到 21.09.2012:
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 无法做到这一点。特别是显示新的值。