如何在JPA中基于分组过滤条件?

时间:2019-07-19 13:05:53

标签: sql jpa jpql

我有一个类似

的表格
| customer | profile | status | date    | 

| 1        | 1       | DONE   | mmddyy  |

| 1        | 1       | DONE   | mmddyy  |

在这种情况下,我想按具有最大日期的配置文件ID进行分组。配置文件可以重复。我已经排除了Java 8流,因为这里有很多条件。

我想将以下SQL转换为JPQL:

select customer, profile, status, max(date) 
from tbl 
group by profile, customer,status, date, column-k 
having count(profile)>0 and status='DONE';

有人可以告诉我如何在JPQL中编写此查询,如果它在SQL中正确吗?如果我在select中声明列,则也需要按group by,并且查询结果也不同。

2 个答案:

答案 0 :(得分:1)

我猜想您想要完成最新的客户/个人资料组合。

如果是,则正确的SQL是:

select t.*
from t
where t.date = (select max(t2.date)
                from t t2
                where t2.customer = t.customer and t2.profile = t.profile
               ) and
      t.status = 'DONE';

我不知道如何将其转换为JPQL,但是您最好还是从可以使用的SQL代码开始。

答案 1 :(得分:0)

在您的查询date columngroup by不需要的status='DONE'中应添加where clause

select customer, profile, status, max(date) 
from tbl 
where status='DONE'
group by profile, customer,status,  
having count(profile)>0