我是SQL的新手,我的一个项目是找到存储在MySQL JIRA数据库中的从一种状态到另一种状态的转换状态(见附图)。
我根据问题ID和转换日期对所有数据进行了排序,以便对数据进行排序。
如果查看前两行,您会看到问题的过渡日期从打开到修复。在第二行,同一问题从修复变为暂停。我需要找出修复状态下的日期问题。
在excel或使用2D数组时,它似乎并不困难,但使用SQL ......似乎不可能。任何建议和指示都很感激:)。
答案 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
如果可能,添加主键(标识),以便可以用主键替换日期比较。