2015-10-13 106 views
0

我試圖讓所有帳戶持有者獲得積極的期末餘額。只有最後一個積極的收盤餘額是有趣的,所以我想擁有我的表的最大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

試試這個'HAVING MAX(FAB.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 錯誤代碼:904 – Jonas

+0

@Guil:抱歉,複製並粘貼錯誤。外部查詢中的別名是錯誤的。更正 –

+0

非常好,謝謝 – Jonas