0

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

我根据问题 ID 对所有数据进行排序,然后是转换日期以对数据进行排序。

如果您查看前两行,您会看到问题从开放到修复的过渡日期。在第二行,同样的问题从固定转移到搁置。我需要找出问题仍然处于修复状态的日期。

在 excel 或使用 2D 数组中,这似乎并不难,但使用 SQL ......这似乎是不可能的。任何建议和指点都非常感谢:)。

在此处输入图像描述

4

1 回答 1

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小提琴

如果可能,添加一个主键(身份),以便可以用主键替换日期比较。

于 2013-09-03T18:20:57.457 回答