抛出SQL错误4145

抛出SQL错误4145,sql,oracle,greatest-n-per-group,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 H

我想让所有账户持有人的期末余额都为正。只有最后一个正期末余额是有趣的,所以我想要表的最大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);
但当我尝试执行此查询时,会出现以下错误:

错误:在上下文中指定的非布尔类型的表达式,其中 应在“;”附近出现条件。SQLState:S0001错误代码:4145

出了什么问题?

这是一个“每组最多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;
这是一个“每组最多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;
这是一个“每组最多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;
这是一个“每组最多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;


您需要将
HAVING MAX(FAB.DATE)
中的值与其他值进行比较,例如:
HAVING MAX(FAB.DATE)=current_DATE
我想要最后一个期末余额,我该怎么做?试试这个
HAVING MAX(FAB.DATE)=从余额表中选择MAX(DATE?这看起来不像是Oracle的错误@Utsav,它不再按持有人分组。您需要将
最大值(生产日期)
的值与其他值进行比较,例如:
最大值(生产日期)=当前日期
我想要最后一个期末余额,我该怎么做?试试这个
最大值(生产日期)=选择最大值(日期)从BALANCE_表中
是否确定应将其标记为Oracle?这看起来不像是Oracle的错误@Utsav,它不再按持有人分组。您需要将
最大值(生产日期)
的值与其他值进行比较,例如:
最大值(生产日期)=当前日期
我想要最后一个期末余额,我该怎么做?试试这个
最大值(生产日期)=选择最大值(日期)从BALANCE_表中
是否确定应将其标记为Oracle?这看起来不像是Oracle的错误@Utsav,它不再按持有人分组。您需要将
最大值(生产日期)
的值与其他值进行比较,例如:
最大值(生产日期)=当前日期
我想要最后一个期末余额,我该怎么做?试试这个
最大值(生产日期)=选择最大值(日期)从BALANCE_表中
是否确定应将其标记为Oracle?这看起来不像是Oracle的错误@Utsav,不再按持有者分组似乎是一个很好的解决方案,但我得到以下错误:错误:ORA-00904:“FAB”。“金额”:无效标识符SQLState:42000错误代码:904@Guil:抱歉,复制粘贴错误。外部查询中的别名错误。Corrected似乎是一个很好的解决方案,但我得到以下错误:错误:ORA-00904:“FAB”。“金额”:无效标识符SQLState:42000错误代码:904@Guil:抱歉,复制粘贴错误。外部查询中的别名错误。Corrected似乎是一个很好的解决方案,但我得到以下错误:错误:ORA-00904:“FAB”。“金额”:无效标识符SQLState:42000错误代码:904@Guil:抱歉,复制粘贴错误。外部查询中的别名错误。Corrected似乎是一个很好的解决方案,但我得到以下错误:错误:ORA-00904:“FAB”。“金额”:无效标识符SQLState:42000错误代码:904@Guil:抱歉,复制粘贴错误。外部查询中的别名错误。纠正