2015-04-20 3 views
2

Этот запрос:Как игнорировать аннулирует в аналитической функции Oracle

select BILL_ID, BILL_DATE FROM BILLS 

возвращает следующие результаты:

bill_id----------bill_date 

1943336232  12/03/15 

null   null 

с этим SQL:

select 
FIRST_VALUE(BILL_ID) OVER(PARTITION BY ACCOUNT_ID ORDER BY BILL_DT DESC) bill_id, 
FIRST_VALUE(BILL_DATE) OVER(PARTITION BY ACCOUNT_ID ORDER BY BILL_DT DESC) bill_date 

я получаю:

bill_id----------bill_date 

null   null 

Что такое запрос, который позволяет мне получить

bill_id----------bill_date 

1943336232  12/03/15 

?

Я попробовал добавлять ИГНОРИРУЙТЕ NULLS, но я всегда получаю обе линии, пожалуйста, помогите спасибо

PS: обе линии, очевидно, имеют один и тот же ACCOUNT_ID

+0

Как BILL_ID может быть NULL в таблице BILLS? – GolezTrol

+0

GolezTrol, это не так, я упростил запрос, это результат левого соединения. – JamDakh

+0

Oracle поддерживает [игнорировать значения null] (https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions066 .htm # SQLRF00642). – Noel

ответ

2

Вы можете указать NULLS LAST опцию в вашем предложении ORDER BY.

select 
    FIRST_VALUE(BILL_ID) OVER(PARTITION BY ACCOUNT_ID ORDER BY BILL_DT DESC NULLS LAST) bill_id, 
    FIRST_VALUE(BILL_DATE) OVER(PARTITION BY ACCOUNT_ID ORDER BY BILL_DT DESC NULLS LAST) bill_date 
... 
+0

Большое спасибо Erkan :))))))))) – JamDakh

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