그룹은 당신이 평균하고자하는 동안 각 간격에 대해 하나 개의 그룹을 만들 group by
를 사용해야합니다
간격으로].
는
select avg(Column), convert((min(datetime) div 500)*500 + 230, datetime) as time
from Databasename.tablename
where datetime BETWEEN '2012-09-08 00:00:00' AND '2012-09-08 15:30:00'
group by datetime div 500
이 날짜와 시간이 묵시적으로 다음 형식 YYMMDDhhmmss
이 될 것 숫자로 변환 할 수 있다는 사실을 사용한다. 이러한 숫자를 100으로 나눠서 초를 제거하고 마찬가지로 500으로 나누면 매 5 분 간격마다 고유 숫자가 산출됩니다.
내가 선택한 추가 열은 간격의 중간을 나타냅니다. 간격 (최소값을 선택하지만 실제로는 중요하지 않음)에서 언제든지 해당 5 분 간격 수로 바뀌어 날짜로 되돌아갑니다. - 및 - 시간 번호, 그리고 2 분 30 분 추가. 유사한 구문을 사용하여 간격의 시작 (+ 230
을 그대로 두거나) 또는 끝 (+ 459
)을 계산할 수 있습니다.
sqlfiddle을 사용하여 테스트되었습니다. 당신의 BETWEEN
범위는 15:30:00
에서 행하지만 간격에서 전혀 다른 사람이 포함됩니다
주 처리 범위의
끝은 그 시간에 시작했다. 어쩌면 당신은 당신의 선택의 범위의 끝을 제외 할 :
당신이 당신의 쿼리 수익률
NULL
이유에 관해서는
NULL 얻을 왜
where datetime >= '2012-09-08 00:00:00' AND datetime < '2012-09-08 15:30:00'
: 간격 산술 연산을 수행하려면 전체 간격을 묶지 않는다 물건을 따옴표로 묶고, 시간 단위에 대해 단수 이름을 사용합니다. 나는.
'2012-09-08 15:30:00' + INTERVAL 5 minute
그러나 이것은 단순히 2012-09-08 15:35:00
의 범위를 확장하고 여전히 당신이 원하는 그 5 분 간격을 만들 것입니다. 여러분이 작성한 방식으로 두 문자열을 추가하려고합니다. 문자열을 숫자로 변환 할 수 없다면 MySQL에서는 불가능합니다.이 경우 숫자가 추가됩니다.
구간 산술 연산을 사용하여 구간의 배타적 종료를 계산할 수 있습니다. 즉,첫 번째 후 간격 : 결과 수를 각 시간의 마지막 구간에 대한 잘못된 날짜를 나타낼 수로
convert((min(datetime) div 500)*500, datetime) + INTERVAL 5 minute as endOfInterval
단순히 대신 내 쿼리의 230
의 500
를 추가 작동하지 않습니다.
출처
2012-09-10 05:24:47
MvG
단락을 들어 본 적이 있습니까? –
참고 : http://stackoverflow.com/questions/3086386/select-group-by-segments-of-time-10-seconds-30-seconds-etc/40584023#40584023 – Wera