这里的问题是类似的:
SQL Selecting multiple columns based on max value in one column
但在这个问题中,它建议使用sql。我想在java方面做。
在java spring boot中,我写道:
Qmk104 findFirstBypakAndpolOrderBytecDesczeyDesc(String pak, int pol)这样,我就可以返回包含max tec的行,它也包含了max zey。
在那之后,我会得到tec和zey:
int maxtec;
int maxzey;有了这些,我将再次查询,以获得具有max zey的max tec的数据。
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中,我可以轻松地
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数据中获取它?有标准吗?
发布于 2021-05-26 14:29:52
我所掌握的标准API知识基本上是不存在的,但是我可以提供以下查询,该查询使用exists逻辑而不是ORDER BY
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);
您可能需要一个原生查询才能实现上述功能,因为JPQL似乎并不直接支持EXISTS。当我们讨论原生查询时,另一种好的方法是使用RANK
SELECT *
FROM
(
SELECT *, RANK() OVER (ORDER BY tec DESC, zey DESC) rnk
FROM qmk104
) t
WHERE rnk = 1;但同样,您需要一个本机查询,或者您可以将上面的代码放入一个存储过程中,然后从Java调用它。
https://stackoverflow.com/questions/67699459
复制相似问题