![](/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.