diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 0029ea5a3f..beb3560eec 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -253,6 +253,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Deque; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -2142,7 +2143,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp private final Field limitWindowFunction(Context c) { return distinct - ? DSL.denseRank().over(orderBy(getNonEmptyOrderBy(c.configuration()))) + ? DSL.denseRank().over(orderBy(getNonEmptyOrderByForDistinct(c.configuration()))) : getLimit().withTies() ? DSL.rank().over(orderBy(getNonEmptyOrderBy(c.configuration()))) : DSL.rowNumber().over(orderBy(getNonEmptyOrderBy(c.configuration()))); @@ -4440,6 +4441,18 @@ final class SelectQueryImpl extends AbstractResultQuery imp return getOrderBy(); } + final SortFieldList getNonEmptyOrderByForDistinct(Configuration configuration) { + SortFieldList order = new SortFieldList(); + order.addAll(getNonEmptyOrderBy(configuration)); + Set> fields = new HashSet<>(map(order, o -> o.$field())); + + for (Field field : getSelect()) + if (!fields.contains(field)) + order.add(field.asc()); + + return order; + } + @Override public final void addOrderBy(Collection> fields) { getOrderBy().addAll(Tools.sortFields(fields));