簡體   English   中英

無法編寫 jooq 查詢

[英]Unable to write jooq query

我無法在 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM