Ir para conteúdo
Fórum Script Brasil
  • 0

duvidas com group by


Rudimar

Pergunta

Em um banco de dados tenho os seguintes dados:

Registro 1:

codigo_empresa = 123321

código_funcionario = 12314

ano_mes = 200902

Registro 2:

codigo_empresa = 123321

código_funcionario = 12315

ano_mes = 200902

Registro 3:

codigo_empresa = 123321

código_funcionario = 12314

ano_mes = 200903

Registro 4:

codigo_empresa = 123321

código_funcionario = 12315

ano_mes = 200903

Agora veja a seguinte instrução SQL:

select codigo_empresa_salarios, ano_mes, salario, codigo_funcionario_salarios from salarios where codigo_empresa_salarios = '123321' and ano_mes <= '200903' group by codigo_funcionario_salarios order by ano_mes desc
retorna o numero de registros corretamente, ou seja, 2 registros, mas retorna o valor de ano_mes como 200902. Eu entendo que isto esta errado, pois note que na instrução SQL especifiquei order by ano_mes desc, ou seja do maior para o menor, então entendo que deveria retornar o ano de 200903, mas retorna o ano de 200902.

então mudei um pouco a instrução SQL, ficou assim:

select codigo_empresa_salarios, ano_mes, salario, codigo_funcionario_salarios from salarios where codigo_empresa_salarios = '123321' and ano_mes <= '200903' group by codigo_funcionario_salarios, ano_mes order by ano_mes desc

Esta instrução retornou corretamente o ano_mes, ou seja 200903, so que retorna o numero de registros errado, retorna 4 registros. No meu entender deveria retornar apenas 2 registros.

Bem, para resolver esta questão momentaneamente, adotei o ultimo caso, como esta retornando o dobro de registros, estou dividindo o resultado por 2, mas como isto é uma martelada no programa, preciso mudar isto...

alguém teria uma luz ai para esta questão....

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

se eu entendi bem você quer só os dados referentes ao ano_mes = 200903 correto?

se eu entendi direito teu código ele está puxando os 4 registros porque voce pediu que selecionasse os registros que tivessem ano_mes menor ou igual a 200903 assim ele vai puxar tanto os registros com 200903 quanto os registros que possuem 200902(porque este é menor que 200903, então se enquadra dentro do select)

da uma olhada, porque pra mim parece que é isso mas posso estar errado...

té mais

Link para o comentário
Compartilhar em outros sites

  • 0

voce entendeu corretamente, mas note que na instrucao sql contem a clausula group by group by codigo_funcionario_salarios. Se não fosse esta clausula, ai sim seriam 4 registros, mas como existe a clausula então são dois registros mesmo...

infelizmente ainda não achei solucao para o caso, a não ser a martelada que dei no programa...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...