Selecionar o registro do Group by
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
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
Curtidas 0
Respostas
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.
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
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
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
02/07/2009
select matricula, MAX(data_excl) data_excl from excluidos group by matricula
GOSTEI 0
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
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
02/07/2009
muito obrigado emerson , era exatamente isto que eu estava buscando
valew msm
valew msm
GOSTEI 0
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??
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
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
02/07/2009
Olá robsonr,
tenta colocar o DISTINCT
Espero ter ajudado.
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
02/07/2009
coloquei o DISTINCT mais ele naum filtrou
GOSTEI 0
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
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
02/07/2009
a chave primaria desta table é codigo
GOSTEI 0
Lehapan
02/07/2009
Então no where do subselect vc iguala o campo CODIGO
GOSTEI 0