Conforme explicado no manual:http://dev.mysql .com/doc/refman/5.6/en/partitioning-overview.html
Isso é facilmente possível pelo particionamento de hash da saída do mês.
CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
ENGINE=INNODB
PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;
Observe que isso apenas partições por mês e não por ano, também existem apenas 6 partições (portanto, 6 meses) neste exemplo.
E para particionar uma tabela existente (manual: https://dev.mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html ):
ALTER TABLE ti
PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;
A consulta pode ser feita a partir de toda a tabela:
SELECT * from ti;
Ou de partições específicas:
SELECT * from ti PARTITION (HASH(MONTH(some_date)));