2017-02-10 13 views
0

У меня есть таблица со следующей информациейSSRS: Как вернуть количество событий в день в течение месяца

ID,DateTime,EventType 
1,6/5/2013 9:35:00,B 
1,6/5/2013 9:35:24,A 
2,6/5/2013 9:35:36,B 
3,6/5/2013 9:36:11,D 
2,6/5/2013 9:39:16,A 
3,6/5/2013 9:40:48,B 
4,7/5/2013 9:35:19,B 
4,7/5/2013 9:35:33,A 
5,7/5/2013 9:35:53,B 
5,7/5/2013 9:36:06,D 
6,7/5/2013 9:39:39,A 
7,7/5/2013 9:40:28,B 
8,8/5/2013 9:35:02,A 
7,8/5/2013 9:35:08,A 
8,8/5/2013 9:35:29,B 
6,8/5/2013 9:36:39,B 

Мне нужно подсчитать, сколько раз каждый день событие изменилось состояние до тех пор, как время между государствами составляла менее 30 секунд в течение периода времени.

В основном я ищу следующий результат установить

6/5/2013 | 1 
7/5/2013 | 2 
8/5/2013 | 1 

Я пробовал несколько различных типов запросов, но ничего не работает. Я использую SQL Server Reporting Services 2008.

+0

Как насчет включения некоторых из вопросов, которые вы пробовали в вопросе. –

ответ

0

Попробуйте это:

select CONVERT(VARCHAR(10), a.DateTime, 103) [Date], count(a.ID) Count from Table a 
inner join Table b on a.ID = b.ID 
where DATEDIFF(second,a.DateTime,b.DateTime) between 1 and 29 and a.ID = b.ID 
and Cast(a.DateTime as Date) = Cast(b.DateTime as date) 
group by CONVERT(VARCHAR(10), a.DateTime, 103) 

Позвольте мне знать, если это помогает.

+0

У вас есть 'и и'' :-) – SMM

+0

@SMM, не видел, спасибо mate –

0
declare @t table (ID int,[DateTime] datetime ,EventType varchar); 
insert @t values 
     (1,'6/5/2013 9:35:00','B'), 
     (1,'6/5/2013 9:35:24','A'), 
     (2,'6/5/2013 9:35:36','B'), 
     (3,'6/5/2013 9:36:11','D'), 
     (2,'6/5/2013 9:39:16','A'), 
     (3,'6/5/2013 9:40:48','B'), 
     (4,'7/5/2013 9:35:19','B'), 
     (4,'7/5/2013 9:35:33','A'), 
     (5,'7/5/2013 9:35:53','B'), 
     (5,'7/5/2013 9:36:06','D'), 
     (6,'7/5/2013 9:39:39','A'), 
     (7,'7/5/2013 9:40:28','B'), 
     (8,'8/5/2013 9:35:02','A'), 
     (7,'8/5/2013 9:35:08','A'), 
     (8,'8/5/2013 9:35:29','B'), 
     (6,'8/5/2013 9:36:39','B'); 
--select * from @t order by ID, DateTime; 

with cte as (
     select *, cast([DateTime] as date) the_date, row_number() over (partition by ID order by DateTime) row_num 
     from @t 
) 
select c1.the_date, count(1) 
from cte c1 
join cte c2 
     on c2.ID = c1.ID 
     and c2.row_num = c1.row_num + 1 
where datediff(S,c1.DateTime, c2.DateTime) < 30 
group by c1.the_date 
order by c1.the_date;