Что случилось с row_number при использовании в подзапросе.ROW_NUMBER Sub Query
Если я запустил код изолированно, то его штраф, но как только я использую его в подзапросе, возвращаются неправильные результаты.
SELECT L.CALC1, X.APP_ID, L.CALC2,
,ROW_NUMBER() OVER (PARTITION BY X.APP_ID ORDER BY CALC2 DESC) R
FROM DWH_DEV.APP_CALC_REF X
CAPD_DEV.APP_LOG L
WHERE X.CALC_ID = L.CALC_ID
AND X.APP_ID = 1234;
Правильные результаты:
CALC1 APP_ID CAL2 R
1 1234 54321 1
1 1234 34322 2
1 1234 23123 3
SELECT CALC1, APP_ID, CALC2 FROM
(
SELECT L.CALC1, L.CALC2, X.APP_ID
,ROW_NUMBER() OVER (PARTITION BY X.APP_ID ORDER BY CALC2 DESC) R
FROM DWH_DEV.APP_CALC_REF X
CAPD_DEV.APP_LOG L
WHERE X.CALC_ID = L.CALC_ID
) WHERE R = 1
AND APP_ID = 1234;
Неправильные результаты:
CALC1 APP_ID CAL2 R
1 1234 23123 1
У меня есть решение, но зачем мне нужно использовать его?
SELECT CALC1, APP_ID, CALC2 FROM
(
SELECT L.CALC1, L.CALC2, X.APP_ID
,'MAX_' || ROW_NUMBER() OVER (PARTITION BY X.APP_ID ORDER BY CALC2 DESC) R
FROM DWH_DEV.APP_CALC_REF X
CAPD_DEV.APP_LOG L
WHERE X.CALC_ID = L.CALC_ID
) WHERE R = 'MAX_1'
AND APP_ID = 1234;
Правильные результаты:
CALC1 APP_ID CAL2 R
1 1234 54321 1
Приветствия
C
Oracle версия =
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64-разрядные производства PL/SQL Release 12.1.0.2.0 - Производство "CORE 12.1.0.2.0 Production" TNS для Linux: версия 12.1.0.2.0 - Производство NLSRTL Версия 12.1.0.2.0 - Производство
Вы показали нам запрос с 'X.APP_ID = 1234' в WHERE условие, но результат содержит APP_ID = 54321, 34322 и 23123? Не могли бы вы объяснить это? – krokodilko
Привет, я сделал задницу, чтобы напечатать мой вопрос. Я сделал поправку. Cheers –
Вы имели в виду ваш row_number для упорядочения по 'calc_2 desc', так как' calc_1' одинаково для всех трех строк? Результат, который вы получаете, на самом деле не так, просто неопределен. –