使用 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
...