【问题标题】:Querying JIRA using SQL Server to return historical statuses使用 SQL Server 查询 JIRA 以返回历史状态
【发布时间】:2014-03-21 01:15:02
【问题描述】:

2014 年 3 月 20 日更新

按照史蒂夫的以下建议,我提出了以下建议:

use JiraDB;
GO
With OrderedBugList AS
(
    SELECT  cg.issueid as "cgIssueID"
        ,cg.AUTHOR as "cgWho"
        ,cg.CREATED as "cgCreated"
        ,cg.ID as "cgID"
        ,ROW_NUMBER() OVER (PARTITION BY cg.issueid ORDER BY cg.created DESC) as RowNumber
FROM changegroup cg
where cg.CREATED < '2014-01-10'
)

select  obl.RowNumber, 
    obl.cgCreated, 
    obl.cgID, 
    obl.cgIssueID, 
    obl.cgWho,
    ji.pkey,
    ji.summary,
    ci.NEWSTRING,
    ci.OLDSTRING 
from OrderedBugList obl
LEFT OUTER JOIN jiraissue ji on ji.ID = obl.cgIssueID
LEFT OUTER JOIN changeitem ci on ci.groupid = obl.cgID
where   obl.RowNumber = 1
and     ji.issuetype = 1
and     ci.FIELD = 'Status'

它没有给我想要的一切,但它确实解决了我描述的问题。

结束更新

我正在尝试创建项目的历史视图,以展示错误指标的趋势。

我在 MS SQL Server 2008 R2 中使用 Atlassian JIRA (v4.4.4#664-r167664)

我使用的是标准(来自Jira sample SQL Queries):

SELECT JI.pkey, STEP.STEP_ID
FROM (SELECT STEP_ID, ENTRY_ID
      FROM OS_CURRENTSTEP
      WHERE OS_CURRENTSTEP.START_DATE < '<your date>'
UNION SELECT STEP_ID, ENTRY_ID
      FROM OS_HISTORYSTEP
      WHERE OS_HISTORYSTEP.START_DATE < '<your date>'
      AND OS_HISTORYSTEP.FINISH_DATE > '<your date>' ) As STEP,
(SELECT changeitem.OLDVALUE AS VAL, changegroup.ISSUEID AS ISSID
      FROM changegroup, changeitem
      WHERE changeitem.FIELD = 'Workflow'
      AND changeitem.GROUPID = changegroup.ID
UNION SELECT jiraissue.WORKFLOW_ID AS VAL, jiraissue.id as ISSID
      FROM jiraissue) As VALID,
jiraissue as JI
WHERE STEP.ENTRY_ID = VALID.VAL
AND VALID.ISSID = JI.id
AND JI.project = <proj_id>;

但是我发现这给了我错误的结果集。

我已经到变更物品表去尝试挖掘我的金子。 :)

SELECT cg.issueid 
  ,ji.pkey
  ,ji.SUMMARY 
  ,ci.FIELD
  ,CAST(ci.NEWSTRING AS varchar) AS NEWST
  ,CAST(ci.OLDSTRING AS varchar) AS OLDST
  ,cg.CREATED
  FROM changegroup cg
  LEFT OUTER JOIN changeitem ci on cg.ID = ci.groupid
  LEFT OUTER JOIN jiraissue ji on cg.issueid = ji.ID 
  where ci.FIELD = 'status'
  and ji.issuetype = 1
  and ji.PRIORITY = 1
  and cg.CREATED < '2012-09-15'
  order by ji.pkey, cg.created DESC, cg.issueid

我的最后一个绊脚石是尝试只返回一条记录,即在所需时间范围内具有状态的一条记录。上面的查询返回一个结果集,它给了我类似的东西:

  • issueid / pkey / Summary / FIELD / NEWST / OLDST / CREATED
  • **32298 / QST-9693 / 错误摘要 1 / 状态 / 已关闭 / 已解决 / 2012-09-12 17:11:46.560
  • 32298 / QST-9693 / 错误摘要 1 / 状态 / 已解决 / 进行中 / 2012-09-07 17:33:24.397
  • 32298 / QST-9693 / 错误摘要 1 / 状态 / 进行中 / 打开 / 2012-09-07 17:32:40.623
  • **32404 / QST-9789 / 错误摘要 2 / 状态 / 已解决 / 进行中 / 2012-09-13 14:41:24.080
  • 32404 / QST-9789 / 错误摘要 2 / 状态 / 进行中 / 打开 / 2012-09-10 17:43:07.663

我只想返回标有双星号 (**) 的记录

请告诉我如何做到这一点:)

提前致谢。

【问题讨论】:

    标签: sql sql-server jira


    【解决方案1】:

    你认为你可以创建一个 SQL Fiddle 来让它更容易玩吗:http://sqlfiddle.com/

    您应该能够通过以下方式实现您想要的,即每个组的第一名:

    ROW_NUMBER() OVER (PARTITION BY...)
    

    条款。这里是如何使用它的完整细分:

    http://technet.microsoft.com/en-us/library/ms186734.aspx

    【讨论】:

    • 您好史蒂夫,感谢您的及时回复。第一个查询是给我错误数据集的查询。第二个查询是我要修复的。还有其他想法吗?
    • 再次感谢,这只返回一条记录:(
    • 可能会产生误解,但在您的帖子中您说您希望“只返回一条记录”。你能澄清一下吗?
    • 是的,查询将返回数千条记录,我已包含示例集以表明我只想获取显示的三个中的第一行。所以我想做的是为所有记录集的查询检索一个不同的行。我会再编辑一下这个问题,看看我能不能说得更清楚。
    • 请阅读您更新的帖子。明确地说,您的意思是要返回每个 issueid 的第一条记录吗?
    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多