2013-10-10 7 views
2

하이 차트를 사용하여 지난 시간의 온도 동작을 확인하고 싶습니다.mysql의 지난 1 시간 평균을 사용한 간단한 온도 추세의 시간대 문제

각 시간당 20 - 30 온도 값을 기록합니다. 여기서는 지난 시간 동안 평균 값 4 ~ 6 개 (10 분 또는 15 분 동안 하나의 값)를 추출하여 그려 봅니다. 어쩌면 나는 그 값을 3 가지 값으로 바꾸어 (20 분 동안 하나씩) 더 부드러운 것을 얻는다.

mysql> SELECT date,valeur FROM temperature 
+---------------------+--------+ 
| date    | valeur | 
+---------------------+--------+ 
| 2013-09-26 11:30:40 | 25.2 | 
| 2013-09-26 11:33:19 | 25.4 | 
| 2013-09-26 11:34:12 | 25.5 | 
| 2013-09-26 11:38:37 | 25.4 | 
| 2013-09-26 11:39:30 | 25.4 | 
| 2013-09-26 11:40:23 | 25.4 | 
| 2013-09-26 11:43:02 | 25.4 | 
| 2013-09-26 11:45:41 | 25.3 | 
| 2013-09-26 11:47:33 | 25.3 | 
| 2013-09-26 11:51:07 | 25.4 | 
| 2013-09-26 11:51:52 | 25.3 | 
... 

내가이 명령을 사용하여 추출하는 시도 :

나는 (예를 들어) 같은 값이

SELECT ROUND(UNIX_TIMESTAMP(date)/(15 * 60)) AS timekey, ROUND(AVG(valeur),1) AS a FROM temperature WHERE date >= (now() - INTERVAL 1 HOUR) GROUP BY timekey ORDER BY DATE; 

을하지만 출력을하지 않습니다. 간격을 5 시간으로 변경하면 다음과 같이 16 개의 값이 표시됩니다.

[1534861, 24.600000] 
[1534862, 24.600000] 
[1534863, 24.600000] 
[1534864, 24.700000] 
[1534865, 24.700000] 
[1534866, 24.600000] 
[1534867, 24.600000] 
[1534868, 24.600000] 
[1534869, 24.600000] 
[1534870, 24.600000] 
[1534871, 24.700000] 
[1534872, 24.700000] 
[1534873, 24.700000] 
[1534874, 24.800000] 
[1534875, 25.000000] 
[1534876, 25.200000] 

이 mysql 요청을 수정하는 방법은 무엇입니까?

덕분에 당신에게 모든

그렉

편집 - 선택 답변을 참조하십시오 : 코드가 좋았지 만, 시간대가 아니었다!

답변

0

시간대 차이가 1 시간이라고 생각됩니다.

지난 1 시간 동안 가치를 얻지 못했지만 지난 5 시간 동안 16 시간을 얻은 경우 (4 시간 가치로 구성), 지난 1 시간 동안 값이없는 것처럼 들립니다. 확실하다면 데이터의 시간대와 지금의 시간대를 확인하십시오.

아마도 sysdate를 사용해보십시오. 매뉴얼에서 인용구 : 또한

는 SET의 TIMESTAMP 문은 NOW 에 의해 반환 된 값()하지만 SYSDATE()에 영향을 미친다. 즉, 바이너리 로그의 타임 스탬프 설정은 SYSDATE() 호출에 영향을 미치지 않습니다. 타임 스탬프를 0이 아닌 값으로 설정하면 NOW()를 호출 할 때마다 해당 값이 반환됩니다. 타임 스탬프를 0으로 설정하면이 효과가 취소되므로 NOW()가 현재 날짜와 시간을 다시 반환합니다.

차이점에 대한 자세한 내용은 SYSDATE()에 대한 설명을 참조하십시오.

+0

. SET time_zone = 'Africa/Brazzaville'사용하기; 그것은 완벽하게 작동합니다! 그것은 지난 시간이 누락 된 다른 쿼리의 이상한 동작을 설명합니다.이 답변을 주셔서 대단히 감사합니다! – iero

+0

NP, 다른 TZ 서버에서 작업 할 때 공통적 인 문제 – AdrianBR

0

이 (floor() 사용에주의) 작동합니다 : 당신 말이 맞아

SELECT from_unixtime(floor(unix_timestamp(date)/15 * 60) * 15 * 60) AS tstamp, 
    round(avg(valeur),1) AS a 
FROM temperature 
WHERE date >= (now() - INTERVAL 1 HOUR) 
GROUP BY 1 
ORDER BY 1 
+0

라운드 대 플로는 어느 정도의 간격이 위 또는 아래에있는지를 결정합니다. 그것은 분실 된 시간 (4 * 15 분 간격)을 설명하지 않습니다. – AdrianBR