2017-09-25 7 views
1

"계획된 시작 시간"및 "계획된 완료 시간"이 사용자 정의 필드 인 문제점에서 겹치는 날짜를 가져 오는 작업이 있습니다. JIRA Driver for SQL을 플러그인으로 사용하고 있습니다. 나는 지금까지이있어 : 사용자 정의 필드 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 문제와 일치하고 나는 붙어있다. 문제는 ISSUE를 기존 ISSUE 번호에 할당해야한다는 것입니다. JIRA API는이를 지시합니다. 이것에 대한 도움을 주시면 감사하겠습니다.

답변

0

내가 원하는 것 같아서 대신 = 구조를 사용하도록 문제가 변경되었습니다.

그러나 시작 시간과 종료 시간을 실제로 비교하지는 않습니다. 당신은

... 
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' 
... 

편집 내가 지금 조금 더 문제를 이해 생각 사용자 정의 필드 식별자 (10100 및 10101) 일치가 아니라 사용자 정의 필드의 값이 일치하는지 ... 확인하고 있습니다. 어쩌면 2JIRA API를 정말 테이블 키에 대한보다 구체적인 참조를 필요로하는 경우, 다음

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 
     ) 

편집 : - (마침 시작) 다음은 당신에게 중복되는 시간에 또 다른 문제가 존재하는 모든 문제를 줄 것이다 3 나는이 문제를 해결할 것인지 확실하지 않다

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 
     ) 

편집하지만 난을 제거했다 : - (단지 논리적 무엇을보고 여기에 내가 JIRA에 액세스 할 수없는) 다음과 같은 작동합니다 내부 조인을 위해 sub-select (exists) 문을 사용합니다.

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

맞아요. 그래서 겹치는 사용자 정의 필드 (StartTime : 10100 및 FinishTime : 10101)가있는 문제를 원하십니까? 예 : Issue1 (시작 13:00, 완료 15:00), Issue2 (시작 : 12:00, 완료 14:00)? –

+0

두 번째 시도에서, JIRA가 여전히'IN' 구조체를 사용하는 것에 대해 불평하는 경우 스크립트의 해당 부분을'(icv3.CUSTOMFIELDID = 10100 또는 icv3.CUSTOMFIELDID = 10101) AND ... '로 변경하십시오. –