2017-09-25 47 views
1

我有一个任务可以从ISSUES获取重叠日期,其中“计划开始时间”和“计划完成时间”是自定义字段。 我正在使用SQL作为插件JIRA驱动程序。 我能走到今天: 自定义字段ID 10100是计划开始时间
自定义字段ID 10101是为计划完成时间Jira SQL自定义字段重叠日期范围

SELECT 
* 
FROM ISSUES i 

INNER JOIN ISSUECUSTOMFIELDVALUES icv 
on i.ID=icv.ISSUEID 

INNER JOIN ISSUECUSTOMFIELDVALUES icv2 
on icv2.VALUE >= icv.VALUE 

INNER JOIN ISSUECUSTOMFIELDVALUES icv3 
on icv2.VALUE <= icv3.VALUE 

WHERE (icv.ISSUEID<>icv2.ISSUEID and icv2.CUSTOMFIELDID=10100 
and icv.CUSTOMFIELDID=10100) and (icv2.ISSUEID<>icv3.ISSUEID 
and icv2.CUSTOMFIELDID=10100 and icv3.CUSTOMFIELDID=10101) 
and icv.ISSUEID=icv3.ISSUEID 
and icv2.ISSUEID= (SELECT ID FROM ISSUES where jql='project=project1' LIMIT 1) //This apears to be the problem 
and i.jql='project=project1' 

它返回单行,但只有在“计划开始时间”和“计划完成时间“的2个问题匹配,我卡住了。问题是ISSSUEID必须分配给现有的ISSUE号码,JIRA API规定。 我希望对此有所帮助。

回答

0

我已经更改了问题行以使用IN构造而不是=,因为我认为这是您想要的?

但是,你实际上并没有比较开始或结束时间。你是确保自定义字段标识符(10100和10101)的比赛,但不包含自定义字段的值匹配...

... 
WHERE (
     icv.ISSUEID <> icv2.ISSUEID 
    AND icv2.CUSTOMFIELDID = 10100 
    AND icv.CUSTOMFIELDID = 10100 
) 
AND (
     icv2.ISSUEID <> icv3.ISSUEID 
    AND icv2.CUSTOMFIELDID = 10100 
    AND icv3.CUSTOMFIELDID = 10101 
) 
AND icv.ISSUEID = icv3.ISSUEID 
AND icv2.ISSUEID IN (
    SELECT ID FROM ISSUES WHERE jql='project=Prakse' 
) 
AND i.jql='project=Prakse' 
... 

编辑我想我明白这个问题会好一点吧。下面将为你对其存在的另一个问题具有重叠时间的所有问题(开始 - 结束):

SELECT 
    * 
FROM 
    ISSUES i 
     INNER JOIN ISSUECUSTOMFIELDVALUES icv 
      ON i.ID = icv.ISSUEID 
       AND icv.CUSTOMFIELDID = 10100 
     INNER JOIN ISSUECUSTOMFIELDVALUES icv2 
      ON i.ID = icv2.ISSUEID 
       AND icv2.CUSTOMFIELDID = 10101 
    WHERE 
     i.JQL= 'project=project1' 
     AND EXISTS (
      SELECT ID FROM ISSUECUSTOMFIELDVALUES icv3 
      WHERE 
       icv3.ISSUEID <> i.ID 
       AND icv3.CUSTOMFIELDID IN (10100, 10101) 
       AND icv3.VALUE >= icv.VALUE 
       AND icv3.VALUE <= icv2.VALUE 
     ) 

EDIT 2如果JIRA API确实需要表键更具体的参考,那么也许下面的工作(我没有访问JIRA这里 - 只是看什么是合乎逻辑的):

SELECT 
    * 
FROM 
    ISSUES i 
     INNER JOIN ISSUECUSTOMFIELDVALUES icv 
      ON i.ID = icv.ISSUEID 
       AND icv.CUSTOMFIELDID = 10100 
       AND i.JQL = 'project=project1' 
     INNER JOIN ISSUECUSTOMFIELDVALUES icv2 
      ON i.ID = icv2.ISSUEID 
       AND icv2.CUSTOMFIELDID = 10101 
       AND i.JQL = 'project=project1' 
    WHERE 
     i.JQL= 'project=project1' 
     AND EXISTS (
      SELECT ID FROM ISSUECUSTOMFIELDVALUES icv3 
      WHERE 
       icv3.ISSUEID <> i.ID 
       AND icv3.CUSTOMFIELDID IN (10100, 10101) 
       AND icv3.VALUE >= icv.VALUE 
       AND icv3.VALUE <= icv2.VALUE 
     ) 

编辑3我不知道这是否会解决问题,但我已经删除了子选择(存在)声明有利于内部联接。

SELECT 
    i.ID, i.JQL, icv.VALUE AS StartTime, icv2.VALUE AS FinishTime 
FROM 
    ISSUES i 
     LEFT JOIN ISSUECUSTOMFIELDVALUES icv 
      ON i.ID = icv.ISSUEID 
       AND icv.CUSTOMFIELDID = 10100 
     LEFT JOIN ISSUECUSTOMFIELDVALUES icv2 
      ON i.ID = icv2.ISSUEID 
       AND icv2.CUSTOMFIELDID = 10101 
     INNER JOIN ISSUECUSTOMFIELDVALUES icv3 
      ON i.ID <> icv3.ISSUEID 
       AND (icv3.CUSTOMFIELDID = 10100 OR icv3.CUSTOMFIELDID = 10101) 
       AND icv3.VALUE >= icv.VALUE 
       AND icv3.VALUE <= icv2.VALUE 
WHERE 
    i.JQL= 'project=project1' 
+0

值匹配在INNER JOIN语句中完成。将'='更改为'in'时,JIRA API会引发错误。必须有严格的价值。 –

+0

正确...所以,你想要自定义字段(开始时间:10100和结束时间:10101)重叠的问题?例如:问题1(开始13:00,结束时间15:00),问题2(开始时间12:00,结束时间14:00)? –

+0

在我的第二次尝试中,如果JIRA仍然抱怨使用'IN'构造,那么将该脚本部分更改为:'(icv3.CUSTOMFIELDID = 10100或icv3.CUSTOMFIELDID = 10101)AND ...' –