Primero yo pondria un campo fecha_factura, este concepto seguro que existe, hace muchos años que termine economicas pero no creo que se haya suprimido.
Si tienes un campo fecha_factura con formato DATE te permitirà trabajar con las partes de la fecha como te decia en los post anteriores Year() y Month() de ellos puedes sacar los periodos y tendrás solucionado el tema de ordenarlos (en la ordenación por el literal Agosto va por delante de Enero!!!).
Finalmente sql no te dará el formato que quieres para la tabla HTML debes construirlo con la programación externa que estes usando php, asp o el que sea.
//Obtengo los periodos
SELECT DISTINCT YEAR(fecha_factura),MONTH(fecha_factura) FROM facturas ORDER BY YEAR(fecha_factura),MONTH(fecha_factura)
//Obtengo las facturas
Select * from tablafacturas order by year(fecha_factura),month(fecha_factura)
Una vez tienes los dos resultset es cuestión de combinar un bucle sobre el primero para obtener los periodos y dentro otro bucle condicionado al periodo actual que obtenga las facturas del segundo resultset...
En seudo codigo
Código PHP:
Ver originalFor (periodos){
imprimo periodo
For (facturas){
IF(periodos.periodo==facturas.periodo){
imprimo factura
}
}
}