每张票的每个状态的跟踪时间? (Jira/MySQL)
Tracking time in each status per ticket? (Jira/MySQL)
所以我目前正在使用 Jira 和 Domo 为我们的团队创建仪表板。
目前我想显示每张票在每个状态下花费的时间。
例如我有一个这样的table。
|date |From | To |Ticket ID
|01/01/21 |Open |In progress |1
|01/03/21 |In progress|In review |1
|01/10/21 |In Review |Done |1
|01/15/21 |Done |Resolved |1
|01/01/21 |Open |In progress |2
|01/03/21 |In progress|In review |2
|01/10/21 |In Review |Done |2
|01/15/21 |Done |Resolved |2
有了这个,我希望能够看到每张票在每个状态下花费了多长时间。
一张工单在完成之前可以返回到一个状态多次。
我真的不知道从哪里开始 mysql 查询开始。
有没有简单的查询可以做到这一点?
大致如下:
样本数据
create table ticket (
dated date,
from_state varchar(10),
to_state varchar(10),
ticket_id int
);
insert into ticket
values( '2021-01-01', 'open', 'prog', 1);
insert into ticket
values( '2021-01-04', 'prog', 'rev', 1);
insert into ticket
values( '2021-01-07', 'rev', 'done', 1);
insert into ticket
values( '2021-01-03', 'open', 'prog', 2);
insert into ticket
values( '2021-01-04', 'prog', 'rev', 2);
insert into ticket
values( '2021-01-04', 'rev', 'prog', 2);
insert into ticket
values( '2021-01-10', 'prog', 'done', 2);
查询:
with partitioned as (
select
row_number() over(partition by ticket_id order by dated) rn,
ticket_id, from_state state, dated start_date
from ticket
),
date_range as (
select
start_state.*,
end_state.start_date as end_date
from partitioned start_state left join partitioned end_state on
start_state.ticket_id = end_state.ticket_id and start_state.rn = end_state.rn -1
),
days_in_state as (
select ticket_id, state, datediff(end_date, start_date) as days
from date_range
)
select ticket_id, state, sum(days) days_in_state
from days_in_state
group by 1,2
order by 1,2
第一个查询部分 'partitioned' 使用窗口函数对每张票的数据进行分组。
第二部分使用自连接link每个州的一张票到下一个州的同一张票(使用第一步中的行号)
第三部分计算每个状态的天数(如果工单多次转换到同一个状态,该状态将有多个行)
最终计算出该票在每个州的总计
https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html
所以我目前正在使用 Jira 和 Domo 为我们的团队创建仪表板。
目前我想显示每张票在每个状态下花费的时间。
例如我有一个这样的table。
|date |From | To |Ticket ID
|01/01/21 |Open |In progress |1
|01/03/21 |In progress|In review |1
|01/10/21 |In Review |Done |1
|01/15/21 |Done |Resolved |1
|01/01/21 |Open |In progress |2
|01/03/21 |In progress|In review |2
|01/10/21 |In Review |Done |2
|01/15/21 |Done |Resolved |2
有了这个,我希望能够看到每张票在每个状态下花费了多长时间。
一张工单在完成之前可以返回到一个状态多次。
我真的不知道从哪里开始 mysql 查询开始。 有没有简单的查询可以做到这一点?
大致如下: 样本数据
create table ticket (
dated date,
from_state varchar(10),
to_state varchar(10),
ticket_id int
);
insert into ticket
values( '2021-01-01', 'open', 'prog', 1);
insert into ticket
values( '2021-01-04', 'prog', 'rev', 1);
insert into ticket
values( '2021-01-07', 'rev', 'done', 1);
insert into ticket
values( '2021-01-03', 'open', 'prog', 2);
insert into ticket
values( '2021-01-04', 'prog', 'rev', 2);
insert into ticket
values( '2021-01-04', 'rev', 'prog', 2);
insert into ticket
values( '2021-01-10', 'prog', 'done', 2);
查询:
with partitioned as (
select
row_number() over(partition by ticket_id order by dated) rn,
ticket_id, from_state state, dated start_date
from ticket
),
date_range as (
select
start_state.*,
end_state.start_date as end_date
from partitioned start_state left join partitioned end_state on
start_state.ticket_id = end_state.ticket_id and start_state.rn = end_state.rn -1
),
days_in_state as (
select ticket_id, state, datediff(end_date, start_date) as days
from date_range
)
select ticket_id, state, sum(days) days_in_state
from days_in_state
group by 1,2
order by 1,2
第一个查询部分 'partitioned' 使用窗口函数对每张票的数据进行分组。
第二部分使用自连接link每个州的一张票到下一个州的同一张票(使用第一步中的行号)
第三部分计算每个状态的天数(如果工单多次转换到同一个状态,该状态将有多个行)
最终计算出该票在每个州的总计
https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html