2013-07-09 2 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 
Смежные вопросы