gpt4 book ai didi

java - QueryDSL 窗口函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:06 25 4
gpt4 key购买 nike

如何使用窗口函数编写查询并选择 QueryDSL 中的所有字段?在文档中有一个这样的例子:

query.from(employee)
.list(SQLExpressions.rowNumber()
.over()
.partitionBy(employee.name)
.orderBy(employee.id));

但我需要生成如下查询:

SELECT * FROM 
(SELECT employee.name, employee.id, row_number()
over(partition BY employee.name
ORDER BY employee.id)
FROM employee) AS sub
WHERE row_number = 1

是否可以使用 JPAQuery 来实现?

最佳答案

JPAQuery 仅支持 JPQL 的表达能力,因此不支持窗口函数,但分页应该可以使用

query.from(employee).orderBy(employee.id).limit(1)

如果你需要使用窗口函数并且你需要 employee.name 和 employee.id 这应该可以工作

NumberExpression<Long> rowNumber = SQLExpressions.rowNumber()
.over()
.partitionBy(employee.name)
.orderBy(employee.id).as("rowNumber");

query.select(employee.name, employee.id)
.from(SQLExpressions.select(employee.name, employee.id, rowNumber)
.from(employee).as(employee))
.where(Expressions.numberPath(Long.class, "rowNumber").eq(1L))
.fetch();

关于java - QueryDSL 窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com