2013-07-09 29 views
-2

我想知道每小時的使用多少低於數據的基礎上:MySQL的總和每小時的使用總

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

是否要發佈由查詢您的報價交付的結果嗎?我期望,無論它做了什麼,上面的查詢都會返回四列。這將變得非常容易,並且可能對您更有用,因爲我們可以調試您發佈的查詢,而不是猜測您可能會使用和調試的內容。 – 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