如何编写这个棘手的SQL / JPA查询?

时间:2012-05-14 19:55:47

标签: sql jpa

(我正在使用Oracle和JPA(来自Java EE 5,WebSphere 7))。

我有一个Project类,Project有一个Tasks列表。

每个任务都有一个序列号,因此我可以确定任务的顺序(Task.seq),分配的用户(Task.userId)和字符串状态Task.status(“IN_PROGRESS”或“COMPELTE”)。项目的任务由其指定的用户按其数字顺序“完成”。

我的问题是......这是一个棘手的问题......我需要一个执行以下操作的查询:

给定用户标识,找到将该项目的当前任务分配给用户的所有项目。 (“当前任务”是在数字序列中找到的第一个任务,其状态为“IN_PROGRESS”。)

我对SQL并不擅长,而且对JPA很新 - 请帮忙!

PS。例如,这是我正在使用的查询,它为我填充了填充了任务列表的所有Project对象:

select distinct p from Project p left join fetch p.taskList

非常感谢任何帮助!

罗布

2 个答案:

答案 0 :(得分:1)

要考虑这一点,首先要为用户找到第一个任务。然后,加入项目信息,并选择您想要了解的项目:

select distinct p.*
from (select userid, projectid, min(t.seq) as firstseq
      from Task t
      where t.userid = <userid> and 
            t.status = 'IN PROGRESS'
      group by userid, projectid
     ) u join
     Task t
     on t.projectid = u.projectid and
        t.seq = u.firstseq join
     Project p
     on p.projectid = u.projectid

我假设任务有一个项目,尽管你没有明确说出来。

此解决方案应该适用于任何数据库。

答案 1 :(得分:1)

类似的东西:

Select p from Project p join p.tasks t where t.user = :user and t.seq = (Select min(t2.seq) from Task t2 where t2 = t and t2.status = 'IN_PROGRESS')