SQL 抛出错误 4145

SQL error 4145 is thrown

我正在尝试让所有账户持有人的期末余额为正。只有最后一个正的期末余额很有趣,所以我想要 table 的 Max Id。我正在尝试以下

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

怎么了?

这是一个 "greatest-n-per-group" 问题,通常使用 window 函数解决:

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;