Jooq在DayToSecond上的平均值

我正在尝试在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


幕布斯6054654
浏览 159回答 1
1回答

凤凰求蛊

您可以DayToSecond通过从间隔差异中提取秒数并将其作为纯数字在Java中获取,来完全避免:使用此功能(从部分采取这里):public&nbsp;static&nbsp;Field<Integer>&nbsp;diff(Field<Instant>&nbsp;field1,&nbsp;Field<Instant>&nbsp;field2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;DSL.field("extract(epoch&nbsp;from&nbsp;{0}&nbsp;-&nbsp;{1})",&nbsp;Integer.class,&nbsp;field1,&nbsp;field2); &nbsp;&nbsp;&nbsp;&nbsp;}要更改此设置:timestampDiff(Tables.MISSION.SOLVE_DATE,&nbsp;Tables.MISSION.START_DATE)变成这个:diff(Tables.MISSION.SOLVE_DATE,&nbsp;Tables.MISSION.START_DATE)然后,您声明SPEED为:Field<Integer>&nbsp;SPEED&nbsp;=&nbsp;field("SPEED",&nbsp;Integer.class);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java