2013-07-09 1 views
-2

:MySQL의 합 시간당 사용 총 I 시간당 사용 아래의 데이터를 기준으로 얼마나 알고 싶습니다

TIME  DATA 
00:00:24 3198 
00:17:42 3199 
00:44:54 3200 
01:24:24 3201 
01:52:24 3202 
02:27:18 3203 
02:51:06 3204 
03:28:30 3205 

내가 같은 쿼리를 사용 :

SELECT 
    left(TIME,2) AS hour, 
    max(DATA) - min(DATA) as usage 
    FROM my_table 
GROUP BY hour 

MySQL은 최대 값과 비교할 때 시간 범위의 최소값만을보고 있기 때문에 잘못된 값을 얻습니다. 나는 손으로 수동으로 데이터를보고이를 요약하면 내가 기대하는 경우

hour  usage 
00  2 
01  1 
02  1 
03  0 

: 결과는

TIME  DATA Usage (summed by hand) 
00:00:24 3198   
00:17:42 3199   
00:44:54 3200 2 
01:24:24 3201   
01:52:24 3202 3 
02:27:18 3203   
02:51:06 3204 2 
03:28:30 3205 1 

직접 MySQL의에서이 문제를 해결하는 방법이 아니면 내가해야합니까 PHP에서 루프를 만드시겠습니까? (편집 쿼리 및 명확히 결과 및 예상 결과)

+0

가 쿼리 당신이 따옴표에 의해 전달 게시하는 결과인가? 위의 쿼리는 4 열을 반환합니다. 그것은 당신이 사용하고 디버깅 할 것이 무엇인지 추측하기보다는 게시하는 쿼리를 디버깅하기에 훨씬 쉽고 가능성이 더 많습니다. – nurdglaw

+2

01:52:24 3202 3 --- 왜? – Strawberry

+0

sqlfiddle을 작성하고 게시하십시오. –

답변

1

이 시도 :

select left(time, 2), count(*) from <your table name> group by left(time, 2) 
0

이 솔루션을 고려은 :

SELECT LEFT(time, 2) AS `hour`, COUNT(LEFT(time, 2)) AS `count` 
FROM tbl 
GROUP BY `hour` 

당신은 당신의 테이블의 이름으로 tbl을 교체해야합니다.

0

확인 다음 쿼리 :

SELECT A.TIME , A.DATA , CASE WHEN B.USAGE IS NULL THEN NULL ELSE USAGE END AS USAGE 
FROM 
USAGE AS A 
LEFT OUTER JOIN 
(
SELECT LEFT(TIME , 2) AS TIMEINHOUR , 
MAX(TIME) AS MAXTIME , MAX(DATA) - MIN(DATA) AS USAGE 
FROM USAGE 
GROUP BY LEFT(TIME , 2) 
) AS B ON A.TIME = B.MAXTIME