2017-01-14 4 views
0

Я пытаюсь изучить соответствие шаблонов, которое было представлено с Oracle 12c. Однако получение столбца ORA-00918: неоднозначно определяется с нижеследующим кодом. Не уверен, где я пропустилПолучение ошибки ORA-00918 при использовании match_recognize

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)) 


    ) 
+0

Есть еще несколько проблем с этим кодом (помимо того, что Алекс указал уже). В MEASURES вы включаете только A.CUSTOMER_ID и т. Д., Но вы возвращаете ALL ROWS PER MATCH. Если вы хотите вернуть соответствующие значения для каждой строки, не измеряйте A.CUSTOMER_ID, измерьте CUSTOMER_ID. И затем используйте псевдонимы столбцов из MEASURES в SELECT. (Вы использовали исходные имена столбцов из базовой таблицы, что тоже хорошо, потому что в MEASURES вы не определяли никаких новых выражений, вы просто переименовали существующие столбцы). Если вы просто хотите вернуть существующие столбцы, вам вообще не нужно включать МЕРЫ! – mathguy

ответ

0

Проблема ваша статья order by; он, кажется, видит исходный столбец таблицы customer_id и значение раздела соответствия одновременно.

Но вы разбиваете на customer_id, поэтому упорядочение этим не имеет никакого смысла. Порядок упорядочивается в разделе (как и в аналитических функциях). Поэтому вы можете просто удалить это:

SELECT CUSTOMER_ID,ORDER_TOTAL,ORDER_TIMESTAMP FROM DEMO_ORDERS MATCH_RECOGNIZE(
    PARTITION BY CUSTOMER_ID 
    ORDER BY ORDER_TIMESTAMP 
... 
+0

Он очень понравился вам –

 Смежные вопросы

  • Нет связанных вопросов^_^