使用 max() 实现 havingRaw() 时出错

Error when implementing havingRaw() with max()

我正在尝试将这个 SQL 查询翻译成 knex:

select
    "events".*,
    "events"."id",
    "events"."version",
    "events"."reviewed_at",
    "events"."source_id"
from "events"
inner join "events" as "events2" on "events".source_id = "events2".source_id
inner join "event_dates" on "events"."id" = "event_dates"."event_id"
where "event_dates"."end_date" > 'NOW()' 
group by
    "events"."id",
    "events"."version",
    "events"."reviewed_at",
    "events"."source_id"
having MAX("events2".reviewed_at) = "events".reviewed_at;

但我似乎无法正确理解 havingRaw() 部分。这是我目前的 havingRaw()

.havingRaw('MAX("events2".reviewed_at) = ?', "events".reviewed_at)

如果我排除havingRaw(..),我的查询就会执行,但我确实需要添加 having 条件。

至少你的代码似乎有语法错误,你使用的 raw API 错误:

.havingRaw('MAX("events2".reviewed_at) = ?', "events".reviewed_at)

您正在尝试读取字符串文字 "event" 的属性 reviewed_at...尝试:

.havingRaw('MAX(??) = ??', ["events2.reviewed_at", "events.reviewed_at"])

其中 ?? 是标识符替换,它会自动正确引用。如果您只使用 ? 替换,knex 会尝试将替换作为值绑定传递给数据库驱动程序。