Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобраться с запросом.  [new]
1165
Member

Откуда:
Сообщений: 3
Суть следующая. Есть система, в которой регистрируются заявки. Далее заявка проходит жизненный цикл согласно бизнес-процессу. В результате прохождения у заявки меняются разные статусы. Помогите на примере таблицы ниже составить запрос, который показывал бы время, сколько заявка была в статусе в ожидании. Таблица во вложении.
25 фев 14, 09:10    [15623629]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом.  [new]
1165
Member

Откуда:
Сообщений: 3
Вложение
25 фев 14, 09:13    [15623637]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом.  [new]
1165
Member

Откуда:
Сообщений: 3
Само вложение

К сообщению приложен файл. Размер - 91Kb
25 фев 14, 09:14    [15623638]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом.  [new]
Добрый Э - Эх
Guest
в зависимости от версии сервера
top 1 подзапрос
lead/lag
25 фев 14, 09:29    [15623674]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом.  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
Думаю что разберетесь, версия 2005+

declare @table table (groupId int, statusId int, created datetime2(0))

INSERT INTO @table
select 1, 1, dateadd(ss, -60, GETUTCDATE()) union all
select 1, 2, dateadd(ss, -50, GETUTCDATE()) union all
select 1, 3, dateadd(ss, -40, GETUTCDATE()) union all
select 1, 2, dateadd(ss, -30, GETUTCDATE()) union all
select 1, 3, dateadd(ss, -20, GETUTCDATE()) union all
select 1, 2, dateadd(ss, -10, GETUTCDATE()) union all
select 1, 3, dateadd(ss, 0, GETUTCDATE())

;with cteTable(groupId, statusId, created, row_n)
as
(
	select groupId, statusId, created, ROW_NUMBER() over (partition by groupId order by created) row_n
	from @table
)

select sum(DATEDIFF(ss, t2.created, t1.created)) [seconds]
from cteTable t1
	join cteTable t2 on t1.groupId = t2.groupId and (t1.row_n - 1) = t2.row_n
where t1.statusId = 3
25 фев 14, 19:29    [15628538]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом.  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
маленькая поправка
where t1.statusId = 3

заменит на
where t2.statusId = 3



в первом варианте считалось время занявшее на переход в этот статус, а не прибывание в статусе
25 фев 14, 19:34    [15628551]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить