gpt4 book ai didi

java - 无法编写 jooq 查询

转载 作者:行者123 更新时间:2023-11-30 05:23:28 27 4
gpt4 key购买 nike

我无法在 JOOQ 中编写上述查询。

这是我的 postgres 查询

select aps.agent_id,aps.stats_date from application as aps
join (
select max(stats_date) as stats_date, agent_id
from application
group by application.agent_id, date(application.stats_date)) temp
on temp.stats_date = aps.stats_date and temp.agent_id = aps.agent_id and aps.stats_date > current_date - interval '30' day;

主要难点在2个地方1) 将子查询的结果赋值给临时表
2) 获取最近 30 天的结果:current_date - 间隔“30”天

最佳答案

1) 将子查询的结果赋值给临时表

鉴于 jOOQ 是 Java 中的内部 DSL,您无法直接在使用它的地方内联派生表,但您必须在语句之前预先声明它:

Table<?> temp = table(
select(
max(APPLICATION.STATS_DATE).as(APPLICATION.STATS_DATE),
APPLICATION.AGENT_ID
)
.from(APPLICATION)
.groupBy(APPLICATION.AGENT_ID, date(APPLICATION.STATS_DATE));

现在您可以使用以下方法加入 temp 表并从中提取列:

Field<Date> tempStatsDate = temp.field(APPLICATION.STATS_DATE);

2) 获取最近 30 天的结果:current_date - 间隔“30”天

可以通过从日期列中减去整数来轻松创建天数间隔,例如

currentDate().minus(30)

或者使用间隔:

currentDate().minus(new DayToSecond(30))

当然,你也可以使用DSL.dateSub()

dateSub(currentDate(), 30)

关于java - 无法编写 jooq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59117627/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com