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

Откуда:
Сообщений: 1
Друзья, подскажите как реализовать следующую хранимую процедуру:

Есть таблица. В ней с некоторыми объектами (Id) происходят некоторые ивенты (IdEvent). Время начала ивента указано в поле DateEvent. Как только у объекта начинается новый ивент, старый прерывается.

DateEvent Id IdEvent
2012-04-11 12:10:22.000 1 5
2012-04-11 12:10:22.000 2 5
2012-04-11 12:24:42.000 1 4
2012-04-11 12:24:42.000 1 5
2012-04-11 12:24:42.000 2 4
2012-04-11 12:24:42.000 2 5
2012-04-11 12:24:52.000 1 3
2012-04-11 12:24:52.000 2 3

Я передаю Id, время начала и окончания, в результате должен получить
IdEvent и его суммарную продолжительность за этот период.

Подскажите, как это можно реализовать. Заранее спасибо!
26 фев 13, 14:20    [13982801]     Ответить | Цитировать Сообщить модератору
 Re: SELECT сосчитать время.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
можно в строке поиска ввести инвариант там будет масса примеров по решению задачи
26 фев 13, 14:27    [13982862]     Ответить | Цитировать Сообщить модератору
 Re: SELECT сосчитать время.  [new]
криденс
Guest
declare @t table( DateEvent datetime, Id int, IdEvent int)

insert @t values
( '2012-04-11 12:10:22.000', 1, 5),
( '2012-04-11 12:10:22.000', 2, 5),
( '2012-04-11 12:24:42.000', 1, 4),
( '2012-04-11 12:24:42.000', 1, 5),
( '2012-04-11 12:24:42.000', 2, 4),
( '2012-04-11 12:24:42.000', 2, 5),
( '2012-04-11 12:24:52.000', 1, 3),
( '2012-04-11 12:24:52.000', 2, 3)


declare @id int, @d1 datetime, @d2 datetime
set @id= 1
set @d1= '20120411'
set @d2= '20120411 12:30:00.000'

select 
	@id as Id, 
	idevent, 
	sum( secEvent) as secEvent
from ( 	
	select 
		idevent, 
		DATEDIFF( ss, DateEvent, isnull( ( select min( DateEvent) from @t as t2 where t2.Id = @id and t2.DateEvent> t1.DateEvent and t2.DateEvent<= @d2), @d2) ) as secEvent 
	from @t as t1
	where Id= @id
	and DateEvent between @d1 and @d2
	) as f1
group by idevent
having sum( secEvent)> 0
27 фев 13, 13:06    [13987933]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить