抛出SQL错误4145

时间:2015-10-13 10:01:15

标签: sql oracle greatest-n-per-group

我试图让所有账户持有人获得正余额。只有最后一个积极的期末余额很有意思,所以我希望得到我桌子的最大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

有什么问题?

1 个答案:

答案 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;