2017-09-25 43 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 ...' –