使用 match_recognize 时出现错误 ORA-00918
Getting error ORA-00918 when using match_recognize
我正在尝试学习 Oracle 12c 引入的模式匹配。但是得到 ORA-00918: column ambiguously defined
从下面的代码。我不确定我错过了什么
SELECT CUSTOMER_ID,ORDER_TOTAL,ORDER_TIMESTAMP FROM DEMO_ORDERS MATCH_RECOGNIZE(
PARTITION BY CUSTOMER_ID
ORDER BY CUSTOMER_ID,ORDER_TIMESTAMP
MEASURES
A.CUSTOMER_ID AS CUSTOMER,
A.ORDER_TOTAL AS TOTAL_AMT,
A.ORDER_TIMESTAMP AS WHEN_HPA
ALL ROWS PER MATCH
PATTERN( A B* )
DEFINE
B AS (B.ORDER_TOTAL < PREV(B.ORDER_TOTAL))
)
问题出在你的order by
子句上;它似乎同时看到原始 table 列 customer_id
和匹配分区值。
但是您要按 customer_id
进行分区,因此按此进行排序无论如何都没有任何意义。排序适用于分区(如在分析函数中)。所以你可以删除它:
SELECT CUSTOMER_ID,ORDER_TOTAL,ORDER_TIMESTAMP FROM DEMO_ORDERS MATCH_RECOGNIZE(
PARTITION BY CUSTOMER_ID
ORDER BY ORDER_TIMESTAMP
...
我正在尝试学习 Oracle 12c 引入的模式匹配。但是得到 ORA-00918: column ambiguously defined 从下面的代码。我不确定我错过了什么
SELECT CUSTOMER_ID,ORDER_TOTAL,ORDER_TIMESTAMP FROM DEMO_ORDERS MATCH_RECOGNIZE(
PARTITION BY CUSTOMER_ID
ORDER BY CUSTOMER_ID,ORDER_TIMESTAMP
MEASURES
A.CUSTOMER_ID AS CUSTOMER,
A.ORDER_TOTAL AS TOTAL_AMT,
A.ORDER_TIMESTAMP AS WHEN_HPA
ALL ROWS PER MATCH
PATTERN( A B* )
DEFINE
B AS (B.ORDER_TOTAL < PREV(B.ORDER_TOTAL))
)
问题出在你的order by
子句上;它似乎同时看到原始 table 列 customer_id
和匹配分区值。
但是您要按 customer_id
进行分区,因此按此进行排序无论如何都没有任何意义。排序适用于分区(如在分析函数中)。所以你可以删除它:
SELECT CUSTOMER_ID,ORDER_TOTAL,ORDER_TIMESTAMP FROM DEMO_ORDERS MATCH_RECOGNIZE(
PARTITION BY CUSTOMER_ID
ORDER BY ORDER_TIMESTAMP
...