如何在SQL或JPQL中选择具有特定String的最后一条记录的每一行?

时间:2014-09-15 08:55:39

标签: sql jpql

我想选择最后一个状态名是谁的人(这里是约翰)?我不知道该怎么做。

表人员

id |name |status
1 | john | 1
2 | fritz | 1
3 | fritz| 2

表状态

id |statusname
1 | first
2 | second
3 | third

我在JPQL中尝试了以下请求:

SELECT DISTINCT p FROM Person p INNER JOIN p.status WHERE status.statusname="first";

我在结果中得到了所有三行。请问有什么不对?

1 个答案:

答案 0 :(得分:1)

如果始终存在第一个状态并且无法删除此状态,那么您的最后 首先

SELECT p.name
FROM Person p 
GROUP BY name
HAVING COUNT(status) = 1

通用解决方案可能如下所示

SELECT name
FROM Person 
GROUP BY name
HAVING MAX(status) = (
   SELECT id FROM status WHERE statusname = 'first'
);

在那里你可以用保存你的状态名的主变量替换'first'。