java - 无法编写 jooq 查询

标签 java sql jooq

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

相关文章:

sql - 如何将 BACPAC 文件上传到 Azure 中的 Blob

SQL Server SELECT @VARIABLE = TOP 1

java - 将 jOOQ 与 Google Cloud SQL 结合使用

java - JOOQ:没有加载图式?

java - 如何将jooq表保存为变量然后引用它

java - 无法从jedis获取资源

java - PMD 拦截器在 Eclipse IDE 上作为插件不可见

java - 具有缩小概念的三元运算符

java - 使用 Runtime.getRuntime().exec() 重定向不起作用

php - 将 if 语句和多个 sql 查询合并为一个查询