简体   繁体   中英

Joining different rows on the same table with different critera

I tried asking around and googling and I have ended up with a query that kills the DB in every possible sense.

I have 3 tables:

jiraissue keeps information about jira tickets (who its assigned to).

changegroup this keeps change date, the id of the ticket being changed and an id to the change details.

changeitem contains the change id, the change field and new/old values.

I want the following output:

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

Criteria is jiraissue.ASSIGNEE value.

I came up with the following:

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"; 

The above query works if I use a specific jiraissue.id , but not if I search by jiraissue.ASSIGNEE (it carries on crunching).

Also I am interested in the latest resolved and assigned dates, there could be many, but i want the last one of each.

Any help is greatly appreciated.

Thank you.

Came up with this, seems to do the trick:

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM