首页 > 解决方案 > 系统间缓存:不能在 WHERE 或 GROUP BY 子句中使用聚合函数

问题描述

我正在学习 Intersystems Cache 并具有以下功能,该功能基于运行该产品的早期版本(我是 17.2)的代码。

Query dueToday(rToday As DType.Date) As %SQLQuery(ROWSPEC = "Book:User.Books,RefNo:%Integer")
{
    SELECT BookODue.Rent, BookODue.RefNo
      FROM BookODue
      LEFT JOIN BookTran
      ON BookODue.Rent = BookTran.Rent
      WHERE (BookODue.AuditDate = :rToday) AND (MAX(BookTran.TranDate) < :rToday)
}

当我编译这个我得到

不能在 WHERE 或 GROUP BY 子句中使用聚合函数

任何帮助表示赞赏。

格拉西亚斯

标签: sqlintersystems-cache

解决方案


我可以推测你真的想要:

SELECT bo.Rent, bo.RefNo
FROM BookODue bo JOIN
     BookTran bt
     ON bo.Rent = bt.Rent
WHERE bo.AuditDate = :rToday
GROUP BY bo.Rent, bo.RefNo
HAVING MAX(bt.TranDate) < :rToday;

推荐阅读