首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从两个字段的最大值中获取数据

如何从两个字段的最大值中获取数据
EN

Stack Overflow用户
提问于 2021-05-26 14:17:33
回答 1查看 81关注 0票数 2

这里的问题是类似的:

SQL Selecting multiple columns based on max value in one column

但在这个问题中,它建议使用sql。我想在java方面做。

在java spring boot中,我写道:

代码语言:javascript
复制
 Qmk104 findFirstBypakAndpolOrderBytecDesczeyDesc(String pak, int pol)

这样,我就可以返回包含max tec的行,它也包含了max zey。

在那之后,我会得到tec和zey:

代码语言:javascript
复制
int maxtec;
int maxzey;

有了这些,我将再次查询,以获得具有max zey的max tec的数据。

代码语言:javascript
复制
tec zey  pak 
0   1     24
1   2    24
2   0    25
2   1    25
4   5    26
5   0    27
5   1    28
5   2     2(this is max tec with zey. max tec= 5. tec 5 has max 1 zey)
5   2     4(but i need also this because max tec with zey so i will make another query to get  both)

在sql中,我可以轻松地

代码语言:javascript
复制
select * from qmk104 f where POL=390097 and PAK='K'and
        (TEC) in
        (select max(t.TEC) from qmk104 t
         where t.POL=f.POL and t.PAK=f.PAK)
                                and ZEY in (
        select max(t.ZEY) from qmk104 t
        where t.POL=f.POL and t.PAK=f.PAK and t.TEC = f.TEC
    );

如何在spring数据中获取它?有标准吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-26 14:29:52

我所掌握的标准API知识基本上是不存在的,但是我可以提供以下查询,该查询使用exists逻辑而不是ORDER BY

代码语言:javascript
复制
SELECT *
FROM qmk104 t1
WHERE NOT EXISTS (SELECT 1 FROM qmk104 t2
                  WHERE t2.tec > t1.tec OR
                        t2.tec = t1.tec AND t2.zey > t1.zey);

Demo

您可能需要一个原生查询才能实现上述功能,因为JPQL似乎并不直接支持EXISTS。当我们讨论原生查询时,另一种好的方法是使用RANK

代码语言:javascript
复制
SELECT *
FROM
(
    SELECT *, RANK() OVER (ORDER BY tec DESC, zey DESC) rnk
    FROM qmk104
) t
WHERE rnk = 1;

但同样,您需要一个本机查询,或者您可以将上面的代码放入一个存储过程中,然后从Java调用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67699459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档