我无法在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/

10-11 20:41
查看更多