来自trunc()-ed字段的JOOQ orderBy()

时间:2018-08-04 11:42:06

标签: java sql database query-builder jooq

基于以下问题:JOOQ Timestamp precision on query

这是我所拥有的查询:

    Result<Record1<Timestamp>> result = createQueryBuilder()
        .selectDistinct(trunc(incomeTable.REF_DATE, DatePart.DAY).as("refdate"))
        .from(incomeTable)
        .where(incomeTable.PROBOS_ID.eq(probosId))
        .fetch();

我想通过.orderBy()字段将as("refdate")添加到where。

1 个答案:

答案 0 :(得分:1)

您有几种选择,最简单的选择是将投影的列表达式分配给局部变量,并在查询中重复使用两次

Field<Timestamp> refdate = trunc(incomeTable.REF_DATE, DatePart.DAY).as("refdate");

Result<Record1<Timestamp>> result = createQueryBuilder()
    .selectDistinct(refdate)
    .from(incomeTable)
    .where(incomeTable.PROBOS_ID.eq(probosId))
    .orderBy(refdate)
    .fetch();

或者,如果不可能的话,使用DSL.field(Name)为order by子句创建一个新的字段引用:

Result<Record1<Timestamp>> result = createQueryBuilder()
    .selectDistinct(trunc(incomeTable.REF_DATE, DatePart.DAY).as("refdate"))
    .from(incomeTable)
    .where(incomeTable.PROBOS_ID.eq(probosId))
    .orderBy(field(name("refdate"))
    .fetch();