我是 SQL 新手,我的一个项目是找到存储在 MySQL JIRA 数据库中的问题从一种状态到另一种状态的转换状态(见附图)。
我根据问题 ID 对所有数据进行排序,然后是转换日期以对数据进行排序。
如果您查看前两行,您会看到问题从开放到修复的过渡日期。在第二行,同样的问题从固定转移到搁置。我需要找出问题仍然处于修复状态的日期。
在 excel 或使用 2D 数组中,这似乎并不难,但使用 SQL ......这似乎是不可能的。任何建议和指点都非常感谢:)。
我根据您提到的内容创建了一个表,这里是模式和查询。
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
如果可能,添加一个主键(身份),以便可以用主键替换日期比较。