Мне нужно получить некоторые данные из базы данных JIRA и создать представление, чтобы показать их.

В нашей JIRA около 100 проектов. Нам нужно создать представление Oracle для визуализации следующих данных.

У нашего рабочего процесса есть следующие статусы Открыто Исправить Решено Тест Проверить Закрыто Отклонено

For a single project, if issues are Delivery-CR, Fault-Bug, Fault-Specification, Fault-Configuration or Fault-Testing we need to create a view to visualize following data.

•   transition date – open to fix
•   transition date – fix to resolved
•   transition date – resolved to test
•   transition date – test to validate
•   Issue type
•   Status 
•   Fix version

Note that Issue type, Status and Fix version are on CHANGEITEM table. I can't find a table to get transaction dates. 

We are using JIRA 6.3.7 and Oracle 11g database

Я попытался выполнить следующий запрос, но безуспешно.

select created, issueid, ci.oldstring, ci.newstring, ci.oldvalue, ci.newvalue from changegroup inner join changeitem ci on changegroup.ID = ci.groupid where issueid in (select ID from JIRAISSUE where PROJECT in (select ID from PROJECT where PNAME = 'Singapore Exchange Post Trade') and ISSUETYPE in (select ID from ISSUETYPE where PNAME in ('Delivery-CR', 'Fault-Bug', 'Fault-Specification', 'Fault-Configuration', 'Fault-Testing'))) where ci.oldstring in('Open','Fix','Resolved','Test','Validate','Closed','Rejected');

Может кто-нибудь сказать мне, где я ошибся.

0
Ruwan Mettananda 12 Мар 2015 в 12:24

2 ответа

Лучший ответ

Я полагаю, вы хотите иметь по одной проблеме в каждой строке.

Этот отчет будет непростым, в структуре базы данных JIRA есть некоторые факторы, которые замедляют его работу.

Я построил запрос, который объединяет столбцы путем повторного объединения одних и тех же таблиц для получения различных значений интересов. Вы можете добавлять столбцы, повторяя CH_n левые соединения ("CHange").

WITH JIRAISSUE_W AS (
    SELECT
      JI.ID                                ,
      P.PKEY ||'-' || JI.ISSUENUM AS "KEY",
      IT.PNAME  AS ISSUETYPE                ,
      IST.PNAME AS ISSUESTATUS              ,
      CG.ISSUEID                            ,
      CG.AUTHOR                             AS "WHO",
      CG.CREATED                            AS "WHEN",
      CI.FIELD                              AS "WHAT",
      DBMS_LOB.SUBSTR(CI.OLDSTRING, 256, 1) AS "FROM",
      DBMS_LOB.SUBSTR(CI.NEWSTRING, 256, 1) AS "TO"
    FROM JIRAISSUE JI
    INNER JOIN ISSUESTATUS IST ON IST.ID = JI.ISSUESTATUS
    INNER JOIN PROJECT P ON P.ID = JI.PROJECT
    INNER JOIN ISSUETYPE IT ON JI.ISSUETYPE = IT.ID
    LEFT JOIN CHANGEGROUP CG ON CG.ISSUEID = JI.ID
    INNER JOIN CHANGEITEM CI ON CI.GROUPID = CG.ID
    WHERE IT.PNAME IN ('Delivery-CR', 'Fault-Bug', 'Fault-Specification',
                       'Fault-Configuration', 'Fault-Testing')
    ORDER BY JI.CREATED
  )
SELECT
  CH_1.KEY                   ,
  CH_1.ISSUETYPE             ,
  CH_1.ISSUESTATUS           ,
  FIXV."TO"   AS FIXVERSION  ,
  CH_1."WHEN" AS "TO_FIX"    ,
  CH_2."WHEN" AS "TO_RESOLVE",
  CH_3."WHEN" AS "TO_TEST"   ,
  CH_4."WHEN" AS "TO_VALIDATE"
FROM JIRAISSUE_W CH_1
LEFT JOIN JIRAISSUE_W FIXV ON 
  FIXV.ISSUEID = CH_1.ID AND 
  FIXV."WHAT"  = 'Fix Version'
LEFT JOIN JIRAISSUE_W CH_2 ON
  CH_2.ISSUEID = CH_1.ID AND
  CH_2."WHAT"  = 'status' AND
  CH_2."TO"    = 'Resolved'
LEFT JOIN JIRAISSUE_W CH_3 ON
  CH_3.ISSUEID = CH_1.ID AND
  CH_3."WHAT"  = 'status' AND
  CH_3."TO"    = 'Test'
LEFT JOIN JIRAISSUE_W CH_4 ON
  CH_4.ISSUEID = CH_1.ID AND
  CH_4."WHAT"  = 'status' AND
  CH_4."TO"    = 'Validated'
WHERE
  CH_1."WHAT" = 'status' AND
  CH_1."TO"   = 'Fix';

Не лучший вариант менее чем за час, но вы можете согласиться с этим для начала.

2
Koshinae 2 Апр 2015 в 07:51

Мне было поручено воссоздать представление перехода в Jira, и я подумал, что мое решение может помочь в решении вашей проблемы.

Мы используем Postgres, поэтому я думаю, вам нужно изменить функцию возраста. Это работает очень хорошо:

select 
                ci.oldstring        as OldStatus
                , ci.newstring as NewStatus
                , AGE(cg.created, coalesce (LEAD (cg.created, -1) OVER closedTime, ji.created)) AS age 
                , cg.created as TransitionCreated
                , ji.created as IssueCreated
                , proj.pname as ProjectName
                , ji.id as IssueId
                , ji.summary
                , ji.reporter
                , ji.assignee
from jiraissue ji
JOIN project proj on ji.project = proj.id
join changegroup cg ON ji.id= cg.issueId
JOIN changeItem ci 
                on cg.id = ci.groupId 
                and ci.field = 'status'
WINDOW
                closedTime AS (PARTITION BY cg.issueId order by cg.id)
order by cg.issueid, cg.id
1
RichTea 9 Ноя 2015 в 14:47