I have and other solution for this problem, running as MySQL scheduler task.
DELIMITER $$
CREATE DEFINER=`root`@`192.168.%` PROCEDURE `compress_ox_data_summary_ad_hourly2`()
BEGIN
set @iDay = DAYOFMONTH(date(now()));
set @dStart = date( now()) - interval @iDay - 1 day;
set @dHist = @dStart - interval 6 month;
set @dCurrentHist = @dStart - interval 4 month;
/* drop old tables*/
drop table if exists openx.`ox_data_summary_ad_hourly2`;
drop table if exists openx.`ox_data_summary_ad_hourly3`;
/* create temp table */
CREATE TABLE openx.`ox_data_summary_ad_hourly2` (
`data_summary_ad_hourly_id` bigint(20) NOT NULL AUTO_INCREMENT,
`date_time` datetime NOT NULL,
`ad_id` int(10) unsigned NOT NULL,
`creative_id` tinyint(10) unsigned NOT NULL,
`zone_id` int(10) unsigned NOT NULL,
`requests` int(10) unsigned NOT NULL DEFAULT '0',
`impressions` int(10) unsigned NOT NULL DEFAULT '0',
`clicks` int(10) unsigned NOT NULL DEFAULT '0',
`conversions` int(10) unsigned NOT NULL DEFAULT '0',
`total_basket_value` tinyint DEFAULT NULL,
`total_num_items` tinyint DEFAULT NULL,
`total_revenue` tinyint DEFAULT NULL,
`total_cost` tinyint DEFAULT NULL,
`total_techcost` tinyint DEFAULT NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`data_summary_ad_hourly_id`),
KEY `ox_data_summary_ad_hourly_zone_id_date_time` (`zone_id` , `date_time`),
KEY `ox_data_summary_ad_hourly_ad_id_date_time` (`ad_id` , `date_time` , `zone_id`),
KEY `ox_data_summary_ad_hourly_date_time` (`date_time`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
/* old history saved by month, and not by day (a~97% saving, as I know) */
insert into ox_data_summary_ad_hourly2 (date_time,ad_id,zone_id,impressions, clicks)
select date(date_time) ,ad_id,zone_id,sum(impressions),sum(clicks) from ox_data_summary_ad_hourly where date_time < @dHist group by year(date_time), month(date_time), ad_id, zone_id
;
/* less-old history, saved by day (1/24) */
insert into ox_data_summary_ad_hourly2 (date_time,ad_id,zone_id,impressions, clicks)
select date(date_time) ,ad_id,zone_id,sum(impressions),sum(clicks) from ox_data_summary_ad_hourly where date_time > @dHist and date_time < @dCurrentHist group by date(date_time), ad_id, zone_id;
insert into ox_data_summary_ad_hourly2 (date_time,ad_id,zone_id,impressions, clicks)
select date_time ,ad_id,zone_id,impressions,clicks from ox_data_summary_ad_hourly where date_time >= @dCurrentHist ;
/* tables saved as something can be wrong */
rename table ox_data_summary_ad_hourly to ox_data_summary_ad_hourly3;
rename table ox_data_summary_ad_hourly2 to ox_data_summary_ad_hourly;
END