【发布时间】:2019-09-07 06:32:48
【问题描述】:
我正在使用 JOOQ 在我的 java 代码中编写 SQL。我在 PostgreSQL 数据库中写入了以下查询:' 查询:获取检查任务的总数和完成任务所用的总时间。 一项任务的总时间是通过执行 (endtime-starttime) 从表“workevents”中计算出来的。但这里我获取的是所有任务所花费的总时间。
with taskdata as (
select taskid from unittest.tasks
where projectname='test'and status='checked'
),
workevents as(
select (endtime-starttime) diff ,unittest.workevents.taskid as
workeventtaskid from unittest.workevents ,taskdata
where taskdata.taskid=unittest.workevents.taskid
)
select sum(workevents.diff),count(distinct workeventtaskid) from
workevents;
我已经把它转换成下面的jooQ AS了:
最终字符串 sql =
with(TASK_INFO_WRAPPER)
.as(select(TASK_ID).from(TASK_TABLE)
.where(PROJECT_NAME.eq(param()).and(TASK_STATUS.eq("checked"))))
.with(WORKEVENT_INFO_WRAPPER)
.as(select(TASK_END_TIME.sub(TASK_START_TIME).as("diff"),
WORKEVENT_TASK_ID.as("workeventtaskid"))
.from(WORKEVENT_TABLE, table(name(TASK_INFO_WRAPPER)))
.where("workeventinfo.taskid=taskinfo.taskid"))
.select().getSQL(ParamType.INDEXED);
但是我无法得到“diff”的总和(日期的差异)。JOOQ 中有没有可以将 sql 语句“select sum(workevents.diff)”转换为 JOOQ 的函数。
我尝试过 sum(field) 函数,但它给出了编译时错误,因为 sum 用于数字。 这里我计算的是两个日期差的累计和(diff)。
【问题讨论】:
标签: postgresql jooq