mysql - 使用不同的条件连接同一个表上的不同行

标签 mysql sql join

我尝试四处询问和谷歌搜索,最终得到了一个在所有可能的意义上杀死数据库的查询。

我有 3 个表:

jiraissue 保留有关 jira 票证(分配给谁)的信息。

changegroup 这会保留更改日期、正在更改的工单的 ID 以及更改详细信息的 ID。

changeitem 包含更改 ID、更改字段和新/旧值。

我想要以下输出:

[解决时间]、[分配日期]、[解决日期]、[jira_ticket_details_from_jiraissue]

条件是 jiraissue.ASSIGNEE 值。

我想出了以下内容:

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.id,则上述查询有效,但如果我通过jiraissue.ASSIGNEE搜索,则上述查询无效(它会进行处理)。

我也对最新解决和分配的日期感兴趣,可能有很多,但我想要每个日期的最后一个。

非常感谢任何帮助。

谢谢。

最佳答案

想出了这个,似乎可以解决问题:

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;

关于mysql - 使用不同的条件连接同一个表上的不同行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32966889/

相关文章:

php - 将数组从 vba 传递到 php Web 服务

mysql - hasMany 关系的查询可能很复杂;这可以做到吗?

sql - 在postgresql中选择带有日期的查询

sql - 学习 ANSI SQL 的最佳资源是什么?

mysql - 物理上存储在DHIS2中的上载/输入的汇总报告的时间戳在哪里,如何从中提取时间戳数据?

sql - 复合 SQL 连接?

php - 使用 PHP 将 mySQL 表输出为 XML 以在谷歌地图上绘制位置

Mysql - 序列化失败 : 1213 Deadlock found when try to get lock; try restarting transaction

r - 在 R 中加入参差不齐的数组

java - 线程 "main"java.sql.SQLException : No value specified for parameter 1 中的异常