2010-01-29 3 views
2

하루에 여러 개의 시간 소인이 포함 된 표가 있는데, 시작 및 중지 이벤트를 나타냅니다. 시작/정지 시간 소인에서 총 실행 시간을 계산하십시오.

ID TimeStamp 
---------------------- 
1 2008-01-01 07:00:00 
1 2008-01-01 08:15:00 
1 2008-01-01 10:00:00 
1 2008-01-01 11:00:00 
1 2008-01-02 10:30:00 
1 2008-01-02 12:00:00 
내가 이런 식으로 하루에 총 실행 시간을 calcuate 싶습니다

:

ID Date  RunningTime 
------------------------- 
1 2008-01-01 02:15:00 
1 2008-01-02 01:30:00 

사람은 내 문제에 대한 좋은 T-SQL 솔루션이 있습니까?

답변

2
WITH q AS 
     (
     SELECT *, 
       CONVERT(DATETIME, CONVERT(VARCHAR(8), TimeStamp, 112), 112) AS dte, 
       ROW_NUMBER() OVER (PARTITION BY id, CONVERT(DATETIME, CONVERT(VARCHAR(8), TimeStamp, 112), 112) ORDER BY TimeStamp) AS rn 
     FROM mytable 
     ) 
SELECT qb.id, qb.dte, SUM(DATEDIFF(second, qb.TimeStamp, qe.TimeStamp)) 
FROM q qb 
JOIN q qe 
ON  qe.id = qb.id 
     AND qe.dte = qb.dte 
     AND qe.rn = qb.rn + 1 
WHERE qb.rn % 2 = 1 
GROUP BY 
     qb.id, qb.dte 

이렇게하면 특정 날짜에 열리는 모든 레코드는 같은 날에 닫아야한다고 가정합니다.

+0

인상적이었습니다. 고맙습니다. –

관련 문제