Selecionar o registro do Group by

Delphi

02/07/2009

boa tarde pessoal
estou com uma duvida tenho uma table onde tenho diversos registros com a mesma matricula, porém com diferentes data_excl. Estou usando o GROUP BY para agrupar para mim poder migrar os dados desta table para outra, até aí tudo bem o problema que ele me mostra o registro mais velho de cada matricula e eu gostaria de ter o mais novo.Tipo: se eu tenho tres registros com a matricula 3, porém com datas de exclusão: 01/01/2007, 01/01/2008, 01/01/2009, ele me mostra sempre o registro com a data 01/01/2007 e eu gostaria de visualizar o registro com a data 01/01/2009.
Qual a alternativa que eu teria ? o código que eu estou usando é este mais ja tentei outras opções.

select * from excluidos group by matricula;

uso o mysql 5.0 com delphi 2006


Robsonr

Robsonr

Curtidas 0

Respostas

Osocram

Osocram

02/07/2009

tenta colocar
select * from excluidos group by matricula order by matricula, data;
ou
select * from excluidos group by matricula order by matricula, data desc;
ou
select * from excluidos group by matricula order by matricula, desc data;

eu nao uso o My sql não sei a sintaxe, mas tenta assim p ver se funciona, ou coloca o order by antes do group by.


GOSTEI 0
Robsonr

Robsonr

02/07/2009

a sintaxe seria esta:
select * from excluidos group by matricula order by matricula, data desc;

mais mesmo assim me retornou os registros mais antigos
o order by antes do group by da erro de sintaxe


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

02/07/2009

select matricula, MAX(data_excl) data_excl from excluidos group by matricula


GOSTEI 0
Robsonr

Robsonr

02/07/2009

minha table tem 22 campos eu vou precisar de todos, eu tentei este código mais daí ele pegou a data mais nova com os dados da data mais antiga


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

02/07/2009

tente assim (sei que funciona no MSSQL e no FB/IB):
select
  excl1.*
from
  excluidos excl1
where
  excl1.data_excl =
    (select MAX(excl2.data_excl)
     from excluidos excl2
     where excl2.matricula = excl1.matricula)



GOSTEI 0
Robsonr

Robsonr

02/07/2009

muito obrigado emerson , era exatamente isto que eu estava buscando
valew msm


GOSTEI 0
Robsonr

Robsonr

02/07/2009

emerson
ocorreu um pequeno problema na hora de migrar que eu não tinha reparado , existem matriculas iguais com a mesma data_excl e eu não posso ter matriculas repetidas , tem como filtrar isto??


GOSTEI 0
Robsonr

Robsonr

02/07/2009

eu tentei colocar o group by novamente mais não aparece nada
select
  excl1.*
from
  excluidos excl1
where
  excl1.data_excl =
   (select MAX(excl2.data_excl)
     from excluidos excl2
     where excl2.matricula = excl1.matricula)
 group by excl1.matricula



GOSTEI 0
Lehapan

Lehapan

02/07/2009

Olá robsonr,
tenta colocar o DISTINCT

select DISTINCT
  excl1.*
from
  excluidos excl1
where
  excl1.data_excl =
    (select MAX(excl2.data_excl)
     from excluidos excl2
     where excl2.matricula = excl1.matricula)


Espero ter ajudado.


GOSTEI 0
Robsonr

Robsonr

02/07/2009

coloquei o DISTINCT mais ele naum filtrou


GOSTEI 0
Lehapan

Lehapan

02/07/2009

Qual é a chave primária (campos índice) da sua tabela? Pois deve ser igualado os índices no subselect do WHERE [b:fe05e91891]´where excl2.matricula = excl1.matricula´[/b:fe05e91891]

Exemplo: caso a sua tabela tenha a chave primária com os campos ID e Matricula, no subselect deve ser colocado [b:fe05e91891]´where excl2.ID = excl1.ID and excl2.Matricula = excl1.atricula´[/b:fe05e91891]

Espero ter ajudado


GOSTEI 0
Robsonr

Robsonr

02/07/2009

a chave primaria desta table é codigo


GOSTEI 0
Lehapan

Lehapan

02/07/2009

Então no where do subselect vc iguala o campo CODIGO


GOSTEI 0
POSTAR