2012-09-10 2 views
3

MySQL에 문제가 있습니다. 두 가지 특정 시간 사이에 MySQL의 평균 데이터가 필요합니다. 이를 위해 주어진 시간에 5 분마다의 데이터 평균

, 내가 사용하고 있습니다 :

select avg(Column) 
from Databasename.tablename 
where datetime BETWEEN '2012-09-08 00:00:00' AND '2012-09-08 15:30:00' 

을 지금, 나는 주어진 시간에, 5 분마다 데이터의 평균 필요. 사용 :

select avg(Column) 
from Databasename.Tablename 
where datetime BETWEEN '2012-09-08 15:00:00' 
        AND '2012-09-08 15:30:00' + 'INTERVAL 5minutes' 

NULL을 (를) 표시하지만 오류가 표시되지 않습니다.

두 특정 기간 내에 5 분마다 데이터를 얻으려면 어떻게해야합니까?

+0

단락을 들어 본 적이 있습니까? –

+0

참고 : http://stackoverflow.com/questions/3086386/select-group-by-segments-of-time-10-seconds-30-seconds-etc/40584023#40584023 – Wera

답변

11

그룹은 당신이 평균하고자하는 동안 각 간격에 대해 하나 개의 그룹을 만들 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 

단순히 대신 내 쿼리의 230500를 추가 작동하지 않습니다.

+0

감사합니다. 데이터를 빼야합니다. 두 가지 특정 시간 사이, 매 5 분마다 평균 한 다음 평균합니다. – user1659213

+0

@ user1659213, 어떤 식으로 빼십시오? * a * 시간 값과 * a * + 5 분 시간 값을 원하고 해당 행과의 차이를 계산하려면 테이블 자체를 조인해야합니다. 그러나 원래 질문에 뺄셈은 언급되지 않았으므로 이것이 새로운 질문이라고 말하고 싶습니다. – MvG

+0

5 분마다 두 개의 특정 시간 사이에 데이터를 빼고 5 분 데이터의 평균을 구해야합니다. 내가 지금하고있는 일은 select (평균 (datetime) div 500) * 500, datetime) + interval 5 분 endOfInterval from Databasename.Tablename datetime BETWEEN '2012- 09-12 10:50:00 'AND'2012-09-12 14:50:00 ' 그룹 by datetime div 500; 누적 평균입니다. 내가 11시에 500을 얻고 11.05에 700을 얻는다 고 가정하면, (700-500)/5 = 40이 필요합니다.하지만 지금 나는 (500 + 700)/5 = 240을 얻고 있습니다. 누적 평균은 필요 없습니다. . 친절하게 도와주세요. – user1659213

관련 문제