简体   繁体   English

使用不同的critera连接同一张表上的不同行

[英]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: 我有3张桌子:

jiraissue keeps information about jira tickets (who its assigned to). jiraissue保留有关jira票证(已分配给谁)的信息。

changegroup this keeps change date, the id of the ticket being changed and an id to the change details. changegroup保留更改日期,票证的ID以及更改详细信息的ID。

changeitem contains the change id, the change field and new/old values. changeitem包含更改ID,更改字段和新/旧值。

I want the following output: 我想要以下输出:

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

Criteria is jiraissue.ASSIGNEE value. 条件是jiraissue.ASSIGNEE值。

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). 如果我使用特定的jiraissue.id ,则上面的查询有效,但如果我通过jiraissue.ASSIGNEE搜索(则进行运算),则jiraissue.ASSIGNEE

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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