2015-10-06 51 views
0

我試着問了一些問題,並用Google搜索,結果我發現一個查詢可以在各種可能的意義上殺死數據庫。用不同的標準在同一張桌子上加入不同的行

我有3個表:

jiraissue保留有關JIRA門票的信息(其誰分配)。

changegroup這將保持更改日期,票證的ID被更改並且ID將更改爲更改詳細信息。

changeitem包含更改ID,更改字段和新/舊值。

我想以下輸出:

[time_taken_to_resolve],[assigned_date],[resolve_date],[jira_ticket_details_from_jiraissue]

Criteria是jiraissue.ASSIGNEE值。

我想出了以下內容:如果我使用一個特定jiraissue.id

SELECT TIMESTAMPDIFF(HOUR,a.assigned_date,b.resolved_date),a.*, b.* 
FROM jiraissue 
INNER JOIN (
    SELECT changegroup.CREATED as "assigned_date",changegroup.issueid as jid 
    FROM changegroup 
    JOIN changeitem ON changegroup.ID = changeitem.groupid 
    WHERE changeitem.FIELD="assignee" 
    GROUP BY changegroup.issueid 
    ORDER BY changegroup.CREATED DESC 
) as a ON a.jid = jiraissue.id 
INNER JOIN ( 
    SELECT changegroup.CREATED as "resolved_date", changegroup.issueid as jid 
    FROM changegroup 
    JOIN jiraissue on changegroup.issueid = jiraissue.ID 
    JOIN changeitem ON changegroup.ID = changeitem.groupid 
    WHERE changeitem.FIELD="status" AND changeitem.NEWVALUE=5 
    GROUP BY changegroup.issueid 
    ORDER BY changegroup.CREATED DESC 
) as b ON b.jid = jiraissue.id 
WHERE jiraissue.ASSIGNEE = "gangsta"; 

上面的查詢工作,但如果我被jiraissue.ASSIGNEE搜索(它進行運算)。

另外我對最近解決和分配的日期感興趣,可能有很多,但我想每個的最後一個。

任何幫助,非常感謝。

謝謝。

+1

你應該分析你的索引。我認爲你有一個由jiraissue.id,但沒有由jiraissue.ASSIGNEE。對於上次解析和分配的日期,您可以在連接中使用max()。 –

回答

0

想出了這個,似乎這樣的伎倆:

SELECT TIMESTAMPDIFF(HOUR,a.assigned_date,b.resolved_date),a.*, b.*,jiraissue.* 
FROM jiraissue 
INNER JOIN (
    SELECT MAX(changegroup.CREATED) as "assigned_date",changegroup.issueid as jid 
    FROM changegroup 
    JOIN jiraissue as ji1 ON changegroup.issueid=ji1.id 
    JOIN changeitem ON changegroup.ID = changeitem.groupid 
    WHERE changeitem.FIELD="assignee" AND ji1.ASSIGNEE="gangsta" AND issuetype = 5 AND PRIORITY = 4 
    GROUP BY changegroup.issueid 
) as a ON a.jid = jiraissue.id 
INNER JOIN (
    SELECT MAX(changegroup.CREATED) as "resolved_date", changegroup.issueid as jid 
    FROM changegroup 
    JOIN jiraissue as ji2 ON changegroup.issueid=ji2.id 
    JOIN changeitem ON changegroup.ID = changeitem.groupid 
    WHERE changeitem.FIELD="status" AND changeitem.NEWVALUE=5 AND ji2.ASSIGNEE="gangsta" AND issuetype = 5 AND PRIORITY = 4 
    GROUP BY changegroup.issueid 
) as b ON b.jid = jiraissue.id 
ORDER BY b.resolved_date DESC; 
相關問題