2011-11-03 5 views
0

15 분 간격으로 표를 그룹화해야합니다. 내가 할 수있는 그와 : 나는 또한 어떤 데이터가없는 현재 내 선택 성명에서 표시되지 않는 간격을 삽입 할 필요가 차트에서 반환 된 데이터를 표시 할 그러나시간 간격으로 그룹화

select dateadd(minute, datediff(minute, 0, ts)/15 * 15, 0), sum (goodpieces) 
from StationCount 
Group by dateadd(minute, datediff(minute, 0, ts)/15 * 15, 0) 

. 어떻게 삽입합니까?

답변

1

가능한 모든 타임 스탬프가있는 테이블을 15 분 단위로 만들고 위의 쿼리에 LEFT JOIN을 수행하십시오. 당신이 당신의 차트는 항상 24 시간을 포함 알고 있다면

SELECT * FROM timestamps LEFT JOIN (SELECT dateadd......) ON timestamps.timestamp = StationCount.ts 

, 당신은 각 항목에 대한 차트의 시작 시간에 추가, 숫자 0-95있는 테이블을 작성해야합니다.

SELECT * 
    FROM (SELECT dateadd(minute, <starttime>, number*15) timestamp FROM numbers) timestamps LEFT JOIN 
     (SELECT dateadd......) ON timestamps.timestamp = StationCount.ts 
+0

왜 숫자 테이블에 24 시간 동안 항목이 있어야하는지 말해 줄 수 있습니까? – TheJoeIaut

+1

96 개 항목 (95 (0-95 포함))이 아니므로 24 * 60/15 = 96입니다. – Ariel

+0

네, 선택의 첫 부분에 숫자 15가 누락되지 않았습니까? – TheJoeIaut

1

이렇게하면 도움이 될 것입니다.

declare @startDate datetime 
     ,@endDate datetime 

set @startDate = '2011-10-25' 
set @endDate = '2011-10-26' 

;with fifteenMinutes 
as 
(
    select dateadd(minute, datediff(minute, 0, @startDate)/15 * 15, 0) as q 
    UNION ALL 
    select dateadd(minute, 15, q) 
    from fifteenMinutes 
    where q < @endDate 
) 

select * from fifteenMinutes 
관련 문제