为了账号安全,请及时绑定邮箱和手机立即绑定

Jooq在DayToSecond上的平均值

Jooq在DayToSecond上的平均值

幕布斯6054654 2021-05-13 18:15:22
我正在尝试在Jooq的嵌套请求中对时间戳字段进行平均。除了Jooq无法将DayToSecond类型BigDecimal转换为DayToSecond字符串,我几乎完成了所有工作,因为它基于字符串表示形式和DayToSecond类似如下形式的表示形式进行转换:00:00:55.646因此转换无法完成,并且会引发异常。我用的是JOOQ 3.11.2那是表格:CREATE TABLE IF NOT EXISTS MISSION (  ID         SERIAL PRIMARY KEY,  START_DATE TIMESTAMP,  SOLVE_DATE TIMESTAMP);这就是JOOQ请求:Field<DayToSecond> SPEED = field("SPEED", DayToSecond.class);Table<Record1<DayToSecond>> nested =        context.select(                timestampDiff(Tables.MISSION.SOLVE_DATE,                              Tables.MISSION.START_DATE)                                .as(SPEED))                        .from(Tables.MISSION_USER)                        .asTable();context.select(        avg(nested.field(SPEED)).as("avg"), // Error with this line        max(nested.field(SPEED)).as("max"),        min(nested.field(SPEED)).as("min"))    .from(nested)    .fetchOne().into(Efficiency.class);效率类是具有3个int字段(平均,最大,最小)的POJO。那么,有没有一种解决方案可以进行平均DayToSecond?
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您可以DayToSecond通过从间隔差异中提取秒数并将其作为纯数字在Java中获取,来完全避免:

使用此功能(从部分采取这里):

public static Field<Integer> diff(Field<Instant> field1, Field<Instant> field2) {
    return DSL.field("extract(epoch from {0} - {1})", Integer.class, field1, field2);
    }

要更改此设置:

timestampDiff(Tables.MISSION.SOLVE_DATE, Tables.MISSION.START_DATE)

变成这个:

diff(Tables.MISSION.SOLVE_DATE, Tables.MISSION.START_DATE)

然后,您声明SPEED为:

Field<Integer> SPEED = field("SPEED", Integer.class);


查看完整回答
反对 回复 2021-05-26
  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信