我试图让所有账户持有人获得正余额。只有最后一个积极的期末余额很有意思,所以我希望得到我桌子的最大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);
但是当我尝试执行此查询时,出现以下错误:
错误:在上下文中指定的非布尔类型的表达式 预计会有一个条件,接近&#39 ;;'。 SQLState:S0001 ErrorCode:4145
有什么问题?
答案 0 :(得分:3)
这是一个“每组最大n”的问题,它们通常通过窗口函数来解决:
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;