![](/img/trans.png)
[英]How to get all the result columns from database with other custom(concat, sum, count) columns in Jooq
[英]How to get the first result from a group (Jooq)
我的要求是获取一个标识符列表,每个标识符都可以引用多个记录,并返回每个标识符的最新记录。
这似乎可以通过标识符列上的orderBy(date, desc)
和fetchGroups()
的组合来实现。 然后我使用values()
来获取 Result 对象。
此时,我想要每个结果 object 中的第一个值。 我可以做get(0)
来获得列表中的第一个值,但这似乎是作弊。 有没有更好的方法从Result
object 中获得第一个结果?
您将编写一个 top-1-per-category 查询,这是top-n-per-category 查询的一个特例。 jOOQ 也支持在 SQL 中产生这种行为的大多数语法。 您不应该在客户端中使用分组,因为您会将所有多余的数据从服务器传输到客户端,这对应于每个组的剩余结果。
一些例子:
Field<Integer> rn = rowNumber().over(T.DATE.desc()).as("rn");
var subquery = table(
select(T.fields())
.select(rn)
.from(T)
).as("subquery");
var results =
ctx.select(subquery.fields(T.fields())
.from(subquery)
.where(subquery.field(rn).eq(1))
.fetch();
var results =
ctx.select(T.fields())
.from(T)
.qualify(rowNumber().over(T.DATE.desc()).eq(1))
.fetch();
var results =
ctx.select(T.fields())
.distinctOn(T.DATE)
.from(T)
.orderBy(T.DATE.desc())
.fetch();
var results =
ctx.select(
T.DATE,
max(T.COL1).keepDenseRankFirstOrderBy(T.DATE.desc()).as(T.COL1),
max(T.COL2).keepDenseRankFirstOrderBy(T.DATE.desc()).as(T.COL2),
...
max(T.COLN).keepDenseRankFirstOrderBy(T.DATE.desc()).as(T.COLN))
.from(T)
.groupBy(T.DATE)
.fetch();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.