Paker 0 Denunciar post Postado Agosto 10, 2010 Saudações ! Estou tendo uma dificuldade para fazer um select se puderem ajudar agradeço. Faço o select em duas tabelas SELECT a.cod, b.nome FROM a JOIN b ON b.cod = a.cod Ai o problema na tabela b tenho vários campos b.cod com o mesmo valor eu preciso que ele selecione apenas um e que este um seja o que no campo b.data tenha a data mais recente; tentei dar um group by no b.cod mas ele não me trás o mais recente ele me trás o primeiro. espero ter sido claro na pergunta, se alguém puder ajudar agradeço; Compartilhar este post Link para o post Compartilhar em outros sites
EuToComProblema! 1 Denunciar post Postado Agosto 10, 2010 SELECT a.cod, b.nome FROM a JOIN b ON b.cod = a.cod WHERE b.cod = (SELECT cod FROM tabela order by data desc limit 1) acho que dar um SELECT LASTDATE(data) tb funciona no subselect Compartilhar este post Link para o post Compartilhar em outros sites
Paker 0 Denunciar post Postado Agosto 11, 2010 Gente quero agradecer pelos postes mas ainda não deu, vou colocar mais detalhado, duas tabelas tabela empresa 1 1 000.000.000-00 P C 0 2010-08-10 13:21:40 2 2 000.000.000-01 P C 0 2010-08-10 13:22:11 3 3 000.000.000-02 P C 0 2010-08-10 13:22:35 4 4 000.000.000-03 P C 0 2010-08-10 13:23:39 5 5 000.000.000-12 F C 1 2010-08-10 13:24:44 6 6 000.000.000-13 F C 1 2010-08-10 13:25:16 7 7 000.000.000-14 F C 1 2010-08-10 13:25:46 8 8 000.000.000-15 F C 2 2010-08-10 13:26:25 9 9 000.000.000-16 F C 2 2010-08-10 13:26:56 tabela empresa_identidade 1 1 000.000/000-00000 RAZAO SOCIAL NOME FANTASIA 2010-08-10 13:21:40 2 2 000.000/000-00000 RAZAO SOCIAL1 NOME FANTASIA1 2010-08-10 13:22:11 3 3 000.000/000-00000 RAZAO SOCIAL2 NOME FANTASIA2 2010-08-10 13:22:35 4 4 000.000/000-00000 RAZAO SOCIAL2 NOME FANTASIA3 2010-08-10 13:23:39 5 5 000.000/000-00012 RAZAO SOCIAL12 NOME FANTASIA12 2010-08-10 13:24:44 6 6 000.000/000-00013 RAZAO SOCIAL13 NOME FANTASIA13 2010-08-10 13:25:16 7 8 000.000/000-00014 RAZAO SOCIAL1 NOME FANTASIA138rep 2010-08-10 13:25:46 8 8 000.000/000-00015 RAZAO SOCIAL15 NOME FANTASIA8 2010-08-10 14:26:25 9 9 000.000/000-00016 RAZAO SOCIAL16 NOME FANTASIA16 2010-08-10 13:26:56 O SQL SELECT empresa_identidade.EMP_COD, empresa_identidade.EMP_I_FANT FROM empresa JOIN empresa_identidade ON empresa.EMP_CATEGORIA = 'F' AND empresa_identidade.EMP_COD = empresa.EMP_COD O RESULTADO 5 NOME FANTASIA12 6 NOME FANTASIA13 8 NOME FANTASIA138rep 8 NOME FANTASIA8 9 NOME FANTASIA16 Se repararem ele repetiu o emp_cod 8 seria isso que quero evitar quando existir duplicidade selecione apenas o mais novo pelo campo 2010-08-10 14:26:25 Olá turma ainda não consegui resolver, para quem puder dar uma força fiz aqui uma query para criar um bd com os campos e alguns inserts assim fica mais fácil ajudar; drop table if exists EMPRESA; drop table if exists EMPRESA_IDENTIDADE; /*==============================================================*/ /* Table: EMPRESA */ /*==============================================================*/ create table EMPRESA ( EMP_COD int auto_increment, EMP_CATEGORIA char(1) not null, EMP_PERMISSAO char(1) not null, EMP_DATAINSC datetime not null, UNIQUE (EMP_COD), primary key (EMP_COD) ); /*==============================================================*/ /* Table: EMPRESA_IDENTIDADE */ /*==============================================================*/ create table EMPRESA_IDENTIDADE ( EMP_I_ID int auto_increment, EMP_COD int not null, EMP_I_CNPJ varchar(18) not null, EMP_I_RAZAO varchar(40) not null, EMP_I_FANT varchar(40) not null, EMP_I_DATAMOD datetime not null, UNIQUE (EMP_I_ID), primary key (EMP_I_ID) ); INSERT INTO EMPRESA VALUES (Null, 'F', 'C', NOW()), (Null, 'F', 'C', NOW()), (Null, 'F', 'C', NOW()), (Null, 'F', 'C', NOW()), (Null, 'F', 'C', NOW()), (Null, 'F', 'C', NOW()); INSERT INTO EMPRESA_IDENTIDADE VALUES (Null, 1, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()), (Null, 2, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()), (Null, 3, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()), (Null, 4, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()), (Null, 5, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()), (Null, 6, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()), (Null, 6, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()), (Null, 6, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()), (Null, 5, '00.000.000/000-00', 'nomeexemplo.ltda', 'nomefantasia', NOW()); E aqui a query inicial para o select SELECT * FROM EMPRESA_IDENTIDADE JOIN EMPRESA ON EMPRESA_IDENTIDADE.EMP_COD IN( EMPRESA.EMP_COD ) AND EMPRESA.EMP_CATEGORIA = 'F' AND EMPRESA.EMP_PERMISSAO = 'C' O que preciso e selecionar dentro EMPRESA_IDENTIDADE os registros que fazem referencia a empresa mas só o mais recente de cada EMP_COD pelo campo EMP_I_DATAMOD vcs terão que mudar o horário dos inserts para poder dar diferença de horário. estou tentando aqui se alguém puder ajudar agradeço se achar a solução posto aqui. obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Paker 0 Denunciar post Postado Agosto 12, 2010 Foi resolvido desta maneira: SELECT DISTINCT * FROM EMPRESA_IDENTIDADE ei JOIN EMPRESA e ON ei.EMP_COD = e.EMP_COD WHERE e.EMP_CATEGORIA = 'F' AND e.EMP_PERMISSAO = 'C' AND ei.EMP_I_DATAMOD = (SELECT max(ei2.EMP_I_DATAMOD) FROM EMPRESA_IDENTIDADE ei2 WHERE ei2.EMP_COD = e.EMP_COD) Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites