Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paker

[Resolvido] Distinct em Join

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.