Я использую JOOQ для написания SQL в своем коде Java. У меня есть следующий запрос, записанный в базу данных PostgreSQL: 'Запрос: извлекает общее количество проверенных задач и общее время, затраченное на выполнение задач.Общее время для задачи вычисляется из таблицы "workevents" следующим образом (endtime-starttime). Но здесь я получаю общее время, потраченное на все задачи.
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КАК ниже:
final String 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 используется для чисел.и здесь я вычисляю накопительную сумму разности двух дат (разность).