2009-11-19 5 views
2

MySQL 용 SQL 문을 작성하려고합니다. 30 시간 단위로보고되는 일련의 서버에 대한 일련의 통계가 있습니다.통계를 시간 청크와 대조합니다.

server varchar(64), 
time datetime, 
bytesIn int, 
bytesOut int 

지금, 나는 모든 서버에 걸쳐 중 1 시간 일일 기간에 bytesIn 및 bytesOut을 모두 대조 일련의 보고서를 생성 할 :이 유사 열이있는 통계 테이블이 있습니다. 예. 바이트 (바이트 단위)로 SUM (bytesIn)을 바이트 단위로 필요로하지만 모든 시간을 시간 단위/일별 버킷으로 변환하는 방법을 알지 못해 'clumped'시간을 반환합니다. 이다 는 반환 된 데이터는 다음과 같이 보일 것이다 :

Time,bytesIn,bytesOut 
12:00,1024,2048 
13:00,4096,8192 
etc 

나는이 간단해야 알아,하지만 난 잃었어요. 누구든지 도와 줄 수 있습니까?

답변

4

아마 DATE_FORMAT() 기능을 사용하고 그룹화 할 수 있습니다. 예를 들어, 정확한 요구 사항에 적응할 수 있기를 바랍니다.

SELECT 
    DATE_FORMAT(time, "%H:%i"), 
    SUM(bytesIn), 
    SUM(butesOut) 
FROM 
    stats 
WHERE 
    time BETWEEN <start> AND <end> 
GROUP BY 
    DATE_FORMAT(time, "%H:%i") 

당신의 시간 창은 하루 이상을 포함하는 경우, 당신은 예를 들어, 형식, 다른 날의 데이터가 '시간 - 중 - 일'버킷으로 집계됩니다 사용합니다. 원시 데이터가 정확히 한 시간에 떨어지지 않으면 "%H:00"을 사용하여 원활하게 처리 할 수 ​​있습니다.

+0

고마워! 그것은 완벽한 대답입니다. 그렇습니다. % i를 00으로 바꿔 데이터를 부드럽게 만들어야했습니다. – cmroanirgo

0

이 작품이 좋을까요?

SELECT substr(time, 12, 2) AS time, sum(bytesIn) AS bytesIn, sum(bytesOut) AS bytesOut 
GROUP BY substr(time, 12, 2) 

그것은 당신의 타임 스탬프 필드는 항상 표준 YYYY-MM-DD-hh.nn.ss 포맷을 가진에 의존하는 것입니다,하지만 난 당신이 TO_DATE 또는 뭔가 그 해결 할 수 확신 - 모르는 어떻게 타임 스탬프를 저장 했습니까?

+0

시간은 'datetime'으로 저장됩니다. 즉 날짜. 나는 그것을 줄 것이다 – cmroanirgo

관련 문제