Ajuda em SQL

Olá galera, tudo bem?
estou com o seguinte problema em minhas mãos (estou usando o MySQL a propósito, mas esse não é meu problema). Vou usar de exemplo uma tabela ficticia em meu banco de dados

ID UF TIPO DATA
1 RJ 2G 2013-03-06
2 SP 2G 2013-03-06
3 TO 2G 2013-03-06
4 RJ 2G 2013-03-06
5 RJ 2G 2013-03-13
6 SP 2G 2013-03-13
7 TO 2G 2013-03-13
8 RJ 2G 2013-03-13
9 SP 3G 2013-03-13
5 RJ 2G 2013-03-20
6 SP 2G 2013-03-20
7 TO 2G 2013-03-20
8 RJ 2G 2013-03-20
9 SP 3G 2013-03-20
10 TO 3G 2013-03-20
11 RJ 2G 2013-03-27
12 SP 2G 2013-03-27
13 TO 2G 2013-03-27
14 RJ 2G 2013-03-27
15 SP 3G 2013-03-27
16 TO 3G 2013-03-27
17 TO 2G 2013-03-27
18 RJ 2G 2013-04-03
19 SP 2G 2013-04-03
20 TO 2G 2013-04-03
21 RJ 2G 2013-04-03
22 SP 3G 2013-04-03
23 TO 3G 2013-04-03
24 TO 2G 2013-04-03
25 SP 3G 2013-04-03
26 RJ 2G 2013-04-10
27 SP 2G 2013-04-10
28 TO 2G 2013-04-10
29 RJ 2G 2013-04-10
30 SP 3G 2013-04-10
31 TO 3G 2013-04-10
32 TO 2G 2013-04-10
33 SP 3G 2013-04-10
34 RJ 3G 2013-04-10
… … … …
100 RJ 2G 2013-05-01
101 SP 2G 2013-05-01
102 TO 2G 2013-05-01
103 RJ 2G 2013-05-01
104 SP 3G 2013-05-01
105 TO 3G 2013-05-01
106 TO 2G 2013-05-01
107 SP 3G 2013-05-01
108 RJ 3G 2013-05-01
109 RJ 2G 2013-05-01
110 SP 2G 2013-05-01
111 TO 2G 2013-05-01
112 RJ 3G 2013-05-01

Estou tentando fazer uma consulta que traga a contagem de sites da coluna TIPO agrupados por UF e que só podem ser do ultimo dia do mês correspondente. Dinamicamente, sem que eu tenha que ficar atualizando a consulta sempre que um novo mês e ano surgirem na tabela.

EXEMPLO:
CONSULTA 2G

UF Março (apenas os valores do ultimo dia desse mês) Abril (apenas os valores do ultimo dia desse mês) Maio (apenas os valores do ultimo dia desse mês) (Outros meses vão surgir com o passar do tempo)
RJ 2 2 3
SP 1 1 2
TO 2 2 3

(outras UFS vão surgir com o passar do tempo)

CONSULTA 3G

UF Março (apenas os valores do ultimo dia desse mês) Abril (apenas os valores do ultimo dia desse mês) Maio (apenas os valores do ultimo dia desse mês) (Outros meses vão surgir com o passar do tempo)
RJ 0 1 2
SP 1 2 2
TO 1 1 1

(outras UFS vão surgir com o passar do tempo)

Já tentei os seguintes códigos

----------------- QUERY QUE RETORNA OS VALORES DO ULTIMO DIA DOS MESES ---------------------

SELECT MES, UF, SITES, DIA, DATA FROM ( SELECT DISTINCT MONTH(DATA) AS MES, UF AS UF, COUNT(ID) AS sites, MAX(DAY(DATA)) DIA, MAX(DATA) AS DATA FROM sites_acesso GROUP BY uf,DAY(DATA), MONTH(DATA) ORDER BY DATA DESC ) AS TAB GROUP BY UF, MES

----------------- FUNÇÃO QUE RETORNA A QUANTIDADE DE MES ---------------------

SELECT COUNT(meses_separados.data_maxima) INTO quantidadeMeses FROM ( SELECT MAX(DATA) AS data_maxima FROM sites_acesso GROUP BY MONTH(DATA) ) AS meses_separados;

Já tentei de muitas formas, mas nenhuma está indo para o resultado que eu pretendo
Se vocês pudessem me ajudar com alguma lógica ou algum pedaço de código, pois meu conhecimento ainda é bastante limitado…

olha não testei, veja se ajuda

SELECT uf, tipo, count(id) AS quantidade_sites FROM site_acesso WHERE YEAR(data) = YEAR(now()) AND MONTH(data) = MONTH(now()) AND DAY(data) = LAST_DAY(now()) GROUP BY uf, tipo

ele irá fazer o seguinte:

  • selecionar estado, tipo, quantidade onde o dia da data do acesso for igual ao ultimo dia do mês atual.
  • agrupar por UF, em seguida por tipo, e mostrar a quantidade de cada tipo para cada uf.

Olá Douglas.
Muito obrigado pela ajuda, mas esse não é bem o resultado que eu procuro.
Procuro uma forma que o retorno seja uma tabela com uma coluna para UFs e outras várias colunas para os meses que existem no banco.
sempre que eu cadastrar um registro com uma data que contenha um novo mês a consulta se encarrega de traze-lo também

exemplo

UF ------------ Tipo ----------- Janeiro ----------- Fevereiro ----------- Março
AC ------------ 2G ------------- 1 ------------------- 2 ------------------ 4
AL ------------ 2G -------------- 1 ------------------- 1 ------------------ 2
BA ------------ 2G ------------- 1 ------------------ 2 ------------------ 7

Agora digamos que eu tenha cadastro registros que contenham como data o mes de abril.
A consulta me retorna:

UF ------------ Tipo ----------- Janeiro ----------- Fevereiro ----------- Março ------------ Abril
AC ------------ 2G --------------- 1 ------------------ 2 ------------------ 4 --------------------9
AL ------------ 2G ---------------- 1 ------------------ 1 ------------------ 2 --------------------5
BA ------------ 2G --------------- 1 ------------------ 2 ------------------ 7 ---------------------10