Функция lead
возвращает значение из строки с указанным сдвигом, которое следует за текущим значением строки.
Данные автоматически разделены (partition by) по экземплярам процесса, строки заранее отсортированы по дате начала (started), признаку сортировки (sorting) и дате окончания (ended).
Значения NULL пропускаются, возвращается следующее не-NULL значение.
lead( колонка|выражение [, сдвиг] )
колонка или выражение — имя столбца из таблицы event, по которому будет работать функция. Также можно написать выражение с более сложной логикой агрегации.
сдвиг — количество значений, следующих за текущей строкой в указанном столбце. Если не указано, то берется значение по умолчанию — 1.
Запрос:
select
process.extId as "Экз. процесса",
event.name as "Шаг",
lead(event.name) as "Следующий шаг",
eventNum() as num
from event, process
order by "Экз. процесса", num
extId | name |
---|---|
1 | register request |
1 | examine thoroughly |
1 | check ticket |
1 | decide |
1 | reject request |
2 | register request |
2 | examine casually |
2 | check ticket |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | pay compensation |
Экз. процесса | Шаг | Следующий шаг | num |
---|---|---|---|
1 | register request | examine thoroughly | 1 |
1 | examine thoroughly | check ticket | 2 |
1 | check ticket | decide | 3 |
1 | decide | reject request | 4 |
1 | reject request | 5 | |
2 | register request | examine casually | 1 |
2 | examine casually | check ticket | 2 |
2 | check ticket | decide | 3 |
2 | decide | reinitiate request | 4 |
2 | reinitiate request | examine thoroughly | 5 |
2 | examine thoroughly | check ticket | 6 |
2 | check ticket | pay compensation | 7 |
2 | pay compensation | 8 |
Запрос:
select
process.extId as "Экз. процесса",
event.name as "Шаг",
lead(event.name,2) as "Следующий шаг",
eventNum() as num
from event, process
order by "Экз. процесса", num
extId | name |
---|---|
1 | register request |
1 | examine thoroughly |
1 | check ticket |
1 | decide |
1 | reject request |
2 | register request |
2 | examine casually |
2 | check ticket |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | pay compensation |
Экз. процесса | Шаг | Следующий шаг | num |
---|---|---|---|
1 | register request | check ticket | 1 |
1 | examine thoroughly | decide | 2 |
1 | check ticket | reject request | 3 |
1 | decide | 4 | |
1 | reject request | 5 | |
2 | register request | check ticket | 1 |
2 | examine casually | decide | 2 |
2 | check ticket | reinitiate request | 3 |
2 | decide | examine thoroughly | 4 |
2 | reinitiate request | check ticket | 5 |
2 | examine thoroughly | pay compensation | 6 |
2 | check ticket | 7 | |
2 | pay compensation | 8 |
Запрос:
select
name as "Событие",
lead(event.name) as "Следующий событие",
count(*) as "Кол-во переходов"
from event
group by "Событие", "Следующий событие"
order by "Кол-во переходов" desc
extId | name |
---|---|
1 | register request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | reinitiate request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | reinitiate request |
1 | examine thoroughly |
1 | check ticket |
1 | decide |
1 | reject request |
Событие | Следующее событие | Кол-во переходов |
---|---|---|
examine casually | decide | 2 |
decide | reinitiate request | 2 |
check ticket | examine casually | 2 |
reject request | 1 | |
reinitiate request | examine thoroughly | 1 |
reinitiate request | check ticket | 1 |
register request | check ticket | 1 |
examine thoroughly | check ticket | 1 |
decide | reject request | 1 |
check ticket | decide | 1 |
Запрос:
select
resource as "Исполнитель",
lead(event.resource) as "Следующий исполнитель",
count(*) as "Кол-во переходов"
from event
group by "Исполнитель", "Следующий исполнитель"
order by "Кол-во переходов" desc
extId | resource |
---|---|
1 | Ellen |
1 | Pete |
1 | Mike |
1 | Sara |
1 | Sara |
1 | Ellen |
1 | Mike |
1 | Sara |
1 | Sara |
1 | Sean |
1 | Pete |
1 | Sara |
1 | Mike |
Исполнитель | Предыдущий исполнитель | Кол-во переходов |
---|---|---|
Sara | Sara | 2 |
Mike | Sara | 2 |
Sean | Pete | 1 |
Sara | Sean | 1 |
Sara | Mike | 1 |
Sara | Ellen | 1 |
Pete | Sara | 1 |
Pete | Mike | 1 |
Mike | 1 | |
Ellen | Pete | 1 |
Ellen | Mike | 1 |
Запрос:
select
name as "Событие",
lead(event.name) as "Следующее событие",
avg(lead(event.started) - ended) as "Время между событиями"
from event
group by "Событие", "Следующее событие"
Или также можно взять следующее значение поля intervalFact
уже заранее рассчитанное системой с данной характеристикой. Оно считается автоматически в каждой из моделей.
select
name as "Событие",
lead(event.name) as "Следующее событие",
avg(lead(event.intervalFact)) as "Следующий интервал"
from event
group by "Событие", "Следующее событие"
Если объединить запросы, то будет видно, что данные одинаковые.
select
name as "Событие",
lead(event.name) as "Следующее событие",
avg(lead(event.started) - ended) as "Время между событиями",
avg(lead(event.intervalFact)) as "Следующий интервал"
from event
group by "Событие", "Следующее событие"
extId | name | Дата старта | Дата окончания |
---|---|---|---|
1 | register request | 2010-12-30 11:32:00 | 2010-12-30 11:42:00 |
1 | check ticket | 2010-12-30 12:12:00 | 2010-12-30 12:55:00 |
1 | examine casually | 2010-12-30 14:16:00 | 2010-12-30 15:16:00 |
1 | decide | 2011-01-05 11:22:00 | 2011-01-05 11:32:00 |
1 | pay compensation | 2011-01-08 12:05:00 | 2011-02-08 12:05:00 |
Событие | Следующее событие | Время между событиями | Следующий интервал |
---|---|---|---|
register request | check ticket | 1800 | 1800 |
check ticket | examine casually | 4860 | 4860 |
examine casually | decide | 504360 | 504360 |
decide | pay compensation | 261180 | 261180 |
pay compensation |