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;
我正在尝试让所有账户持有人的期末余额为正。只有最后一个正的期末余额很有趣,所以我想要 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;