#php #mysql
#php #mysql
Вопрос:
....
09.05.11 12:10 | 14,5
09.05.11 12:00 | 19,5
09.05.11 11:50 | 13,9
09.05.11 11:40 | 15,4
09.05.11 11:30 | 15,6
09.05.11 11:20 | 14,3
09.05.11 11:10 | 16,7
09.05.11 11:00 | 19,3
09.05.11 10:50 | 12,6
09.05.11 10:40 | 10,8
09.05.11 10:30 | 10,5
09.05.11 10:20 | 15,6
09.05.11 10:10 | 14,9
09.05.11 09:00 | 10,1
09.05.11 09:50 | 10,7
....
Мне нужны AVG
данные за каждый час.
например. средние данные из 09.05.11 11.00
вычисляются от ( 09.05.11 10.10
до 09.05.11 11.00
).
12.00
из 11.10 - 12.00
и так далее…
Как я могу это сделать?
Комментарии:
1. Пожалуйста, не могли бы вы включить детали
SELECT
запроса, который вы использовали для генерации этих данных, а также структуру таблицы.2. К вашему сведению, было бы намного проще выполнить группировку с 11:00, так как
11:00-11:59
это сработает или вам нужно выполнить группировку так, как вы описали?3. Группировать данные в 11:00-11: 59 легко, и подойдет обычная ГРУППА, но мне нужно сгруппировать в 11: 10-12:00. Я никак не могу изменить даты ввода.
4. Разве вы не должны группироваться к 11: 10-12: 09? Тогда это все равно было бы легко: просто сгруппируйте по времени минус 10 минут. Обратитесь к документам DATE_SUB / DATE_ADD для получения дополнительной информации.
5. Я только что обнаружил, что это тоже 🙂 черт возьми, это просто, почему я не подумал об этом раньше. Спасибо, ребята.
Ответ №1:
ПОПРОБУЙТЕ
SELECT AVG( visit ) , HOUR( `time_column` )
FROM time_table
WHERE DATE_SUB( `time_column` , INTERVAL 1 HOUR )
GROUP BY HOUR( `time_column` )
рабочий пример
CREATE TABLE IF NOT EXISTS `time_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`waqt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`visit` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dumping data for table `time_table`
--
INSERT INTO `time_table` (`id`, `waqt`, `visit`) VALUES
(1, '2011-07-28 13:29:04', 3),
(2, '2011-07-28 15:29:10', 4),
(3, '2011-07-28 13:45:35', 7),
(4, '2011-07-28 15:00:47', 5),
(5, '2011-07-28 14:45:03', 6),
(6, '2011-07-28 13:00:21', 3);
и затем я выполняю за час посещение
SELECT AVG(visit), HOUR(waqt)
FROM time_table
WHERE DATE_SUB(`waqt`,INTERVAL 1 HOUR) GROUP BY HOUR(waqt)