2015-10-13 2 views
0

Я пытаюсь получить всех держателей счетов с положительным балансом закрытия. Интересен только последний положительный баланс закрытия, поэтому я хочу иметь Max Id моей таблицы. Я пытаюсь следующийОшибка SQL 4145 сброшена

SELECT DA.HOLDER, FAB.AMOUNT 
    FROM ACCOUNTS_TABLE DA 
     JOIN BALANCE_TABLE FAB ON FAB.ACCOUNT_ID = DA.ID 
    WHERE FAB.IS_CLOSING = 1 AND FAB.AMOUNT > 0 
    GROUP BY DA.HOLDER 
    HAVING MAX(FAB.DATE); 

Но когда я пытаюсь выполнить этот запрос, я получаю следующее сообщение об ошибке:

Error: An expression of non-boolean type specified in a context where a condition is expected, near ';'. SQLState: S0001 ErrorCode: 4145

Что не так?

+2

Вам необходимо сравнить значение из 'HAVING MAX (FAB.DATE)' в что-то, например: 'HAVING MAX (FAB.DATE) = current_date' –

+0

Я хочу иметь последний баланс закрытия, как это сделать? – Jonas

+1

Попробуйте «МАШИНА МАШИНЫ» (FAB.DATE) = выберите max (date) из BALANCE_TABLE' – Utsav

ответ

3

Это «величайшая-н-за группу» вопрос, и они, как правило, решается с помощью оконной функции:

SELECT holder, amount, fab_date 
FROM (
    SELECT da.holder, 
     fab.amount, 
     fab.date as fab_date, 
     max(fab.date) OVER (PARTITION BY da.holder) as max_date 
    FROM accounts_table da 
     JOIN balance_table fab ON fab.account_id = da.id 
    WHERE fab.is_closing = 1 
    AND fab.amount > 0 
) 
WHERE fab_date = max_date; 
+0

Кажется хорошим решением, но я получаю следующее сообщение об ошибке: Ошибка: ORA-00904: «FAB». «AMOUNT»: недопустимый идентификатор SQLState: 42000 ErrorCode: 904 – Jonas

+0

@Guil: извините, скопируйте и вставьте ошибку. Алиас во внешнем запросе неверен. Исправлено –

+0

Отлично, спасибо – Jonas

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