Ir para conteúdo

Arquivado

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

MarceloTune

Select com ultimas linhas inseridas (mais difícil do que parece)

Recommended Posts

Bom dia/tarde/noite



Indo direto ao ponto.



Preciso pegar os dados de duas tabelas (relacionadas normalmente entre uma chave estrangeira), sendo que na segunda tabela deve vir apenas o ultimo registro inserido de cada chave estrangeira.



Por exemplo, para a chave estrangeira de nome "idVisitante" e de valor "5", deve vir apenas a ultima tupla(linha) inserida.


Mesmo que hajam 10 linhas com o valor "5" na coluna "idVisitante", o select deve trazer apenas a ultima linha inserida destas 10.


O mesmo deve ocorrer para os outros valores de "idVisitante".



Espero que resolvamos este Select 03_piscando.png


Compartilhar este post


Link para o post
Compartilhar em outros sites
Motta,

Um subselect com MAX id me retorna o maior id da tabela.

O que preciso é o seguinte:


Puxar todos visitantes, sendo que quando houver relação com a tabela visita (sempre haverá, pois é um relacionamento obrigatório) deve trazer a data_entrada da ultima visita feita por aquele visitante.

Esta é a síntese do problema.


Estou tentando resolver isso em uma query porque terei que migrar esta solução para dois bancos distintos (MySQL e SQL). Mas caso a solução venha em uma procedure já ficaria muito grato!



Abaixo segue a estrutura das tabelas:


CREATE TABLE IF NOT EXISTS `visita` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`idVisitante` int(11) DEFAULT NULL,

`data_entrada` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

`data_saida` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

PRIMARY KEY (`id`),

KEY `idVisitante` (`idVisitante`),

)


CREATE TABLE IF NOT EXISTS `visitante` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`nome` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

`cod_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`),

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

query básica

 

 

visita mais recente de um visitante

select *
from visita v1
where v1.idVisitante = 1
and     v1.data_entrada = (select max(v2.data_entrada)
                           from visita v2
                           where v2.idVisitante = v1.idVisitante)

o resto é variação disto join etc

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.