2011-10-25 7 views
1

Id (int), EventDate (DateTime), EventStart (datetime) 및 EventEnd (datetime) 열이있는 Events라는 테이블이 있습니다.하루의 총 이벤트 지속 시간 계산

모든 일정은 하루 만에 시작하고 끝납니다 (즉, 일정은 다음 날로 끝나지 않음). 그러나 지정된 날짜의 일정은 서로 겹칠 수 있습니다.

주어진 날짜에 여러 이벤트가 발생할 수 있습니다.

적어도 하루에 하나의 이벤트가 T-SQL에서 실행되는 총 지속 시간을 하루 동안 계산하고 싶습니다. 주어진 날짜에 이벤트를 선택할 수 있으며 두 이벤트가 겹치면 true를 반환하고 그렇지 않으면 false를 반환하는 함수를 작성했습니다.

그러나 레코드를 쌍으로 가져와 내 함수를 통해 실행하는 방법에 문제가 있습니다. 이벤트가 다 떨어질 때까지 적절하게 기간을 추가하십시오.

도와 주시겠습니까?

크리스

+1

일부 샘플 데이터 및 일부 예상 출력을 줄 수 있습니까? 네가 묻는대로 따라갈 지 모르겠다. –

답변

1

이 시도 :

--test table 
declare @t table(fromt datetime, tot datetime) 
--test data 
insert @t values('2011-01-01 10:00', '2011-01-01 11:00') 
insert @t values('2011-01-01 10:00', '2011-01-01 10:05') 
insert @t values('2011-01-01 10:30', '2011-01-01 11:30') 
insert @t values('2011-01-01 12:00', '2011-01-01 12:30') 
insert @t values('2011-01-02 12:00', '2011-01-02 12:30') 

--query 
;with f as 
(
    select distinct fromt from @t t 
    where not exists(select 1 from @t where t.fromt > fromt and t.fromt < tot) 
), t as 
(
    select distinct tot from @t t 
    where not exists(select 1 from @t where t.tot >= fromt and t.tot < tot) 
), s as 
(
    select datediff(day, 0, fromt) d, datediff(second, fromt, (select min(tot) 
     from t where f.fromt < tot and datediff(day, f.fromt, tot) = 0)) sec 
    from f 
) 
select dateadd(day, 0, d) day, sum(sec)/60 [minutes] 
from s 
group by d 
order by d 

결과 :

day      minutes 
----------------------- ------- 
2011-01-01 00:00:00.000 120 
2011-01-02 00:00:00.000 30 
+0

우수 답변. 매력처럼 처음으로 일했습니다! 감사. – user1012598