MySQL查询过渡状态

时间:2013-09-03 17:37:06

标签: mysql sql

我是SQL的新手,我的一个项目是找到存储在MySQL JIRA数据库中的从一种状态到另一种状态的转换状态(见附图)。

我根据问题ID和转换日期对所有数据进行了排序,以便对数据进行排序。

如果查看前两行,您会看到问题的过渡日期从打开到修复。在第二行,同一问题从修复变为暂停。我需要找出修复状态下的日期问题。

在excel或使用2D数组时,它似乎并不困难,但使用SQL ......似乎不可能。任何建议和指示都很感激:)。

enter image description here

1 个答案:

答案 0 :(得分:1)

我根据你提到的内容创建了一个表,这里是架构和查询。

CREATE TABLE tableName 
    (
     tID int , 
     startDate date,
      transitionDate date,
      fromStatus varchar(10),
      toStatus varchar(10)
    );

要特别注意NOT EXISTS子查询。 tID 1进出fixing,因此这会处理不正确的计算。

SELECT t1.tID,  sum(t2.transitionDate - t1.transitionDate)
FROM tableName t1, tableName t2
WHERE t1.tID = t2.tID AND t1.toStatus = "F" AND t2.fromStatus = "F" 
    AND t1.transitionDate <= t2.transitionDate AND
    NOT EXISTS (SELECT * FROM tableName t3 where t3.toStatus = "F" AND
              t3.transitionDate != t1.transitionDate AND
              t3.transitionDate != t2.transitionDate AND
              t3.transitionDate BETWEEN t1.transitionDate AND t2.transitionDate)
GROUP BY t1.tID

如果您希望每次修复问题时计数 -

SELECT t1.tID,  (t2.transitionDate - t1.transitionDate)
FROM tableName t1, tableName t2
WHERE t1.tID = t2.tID AND t1.toStatus = "F" AND t2.fromStatus = "F" 
    AND t1.transitionDate <= t2.transitionDate AND
    NOT EXISTS (SELECT * FROM tableName t3 where t3.toStatus = "F" AND
              t3.transitionDate != t1.transitionDate AND
              t3.transitionDate != t2.transitionDate AND
              t3.transitionDate BETWEEN t1.transitionDate AND t2.transitionDate)
GROUP BY t1.tID, t1.transitionDate

SQL fiddle

如果可能,添加主键(标识),以便可以用主键替换日期比较。