我无法在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”天
鉴于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);
可以通过从日期列中减去整数来轻松创建日间隔,例如
currentDate().minus(30)
或使用间隔:
currentDate().minus(new DayToSecond(30))
当然,您也可以使用DSL.dateSub()
DSL.dateSub()