Como fazer uma consulta de referência cruzada usando a mesma tabela

4 respostas
J

Pessoal estou com dificuldade de fazer uma consulta de referência cruzada, onde preciso trazer em colunas o MesAnterior e o MesPosterior. Será que alguém já fez algo parecido.

SELECT tb_apf.Data, tb_apf.Trans FROM tb_apf

tipo assim

SELECT tb_apf.Data as mesAnterior, tb_apf.Trans, tb_apf.Data as mesPosterior, tb_apf.Trans FROM tb_apf

4 Respostas

A

Isso é o tipo de coisa que cada banco implementa de um jeito. Que banco você usa?

J

Mysql

A

isso parece um trabalho para pivot table… Veja isso:

http://www.google.com/url?sa=t&rct=j&q=pivot+table+mysql+tutorial&source=web&cd=3&ved=0CF4QFjAC&url=http%3A%2F%2Fdatacharmer.org%2Fdownloads%2Fpivot_tables_mysql_5.pdf&ei=5z3fT_yTBoSm8QTV7uXHCg&usg=AFQjCNFljJ_ICPMSmrfgqR7rEKMSsom_oQ

A

Não sei se entendi corretamente o problema, mas pelo que entendi só precisaria de um join simples:

SELECT  
    atual.data data_atual,
    anterior.data data_mes_anterior,
    posterior.data data_mes_posterior
  FROM
    tabela AS atual 
    LEFT JOIN tabela AS anterior ON  FORMAT_MES_ANO(atual.data) - 1  = FORMAT_MES_ANO(anterior.data)
    LEFT JOIN tabela AS posterior ON  FORMAT_MES_ANO(atual.data) + 1  = FORMAT_MES_ANO(posterior.data)

Uma observação, troque FORMAT_MES_ANO pela função de formatar data em ano + mes em seu banco de dados.

Outra, utilizei LEFT JOIN pois não sei se sempre existirá um mês anterior e posterior

Criado 18 de junho de 2012
Ultima resposta 18 de jun. de 2012
Respostas 4
Participantes 3