0

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

我有一个项目类,项目有一个任务列表。

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

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

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

我对 SQL 不是很好,而且对 JPA 很陌生——请帮忙!

PS。例如,这是我当前使用的查询,它可以让我获得所有填充了任务列表的 Project 对象:

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

任何帮助是极大的赞赏!

4

2 回答 2

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')
于 2012-05-15T13:07:19.883 回答
0

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

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

我假设该任务有一个 projectid,尽管您没有明确说明。

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

于 2012-05-14T20:07:55.467 回答