• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

nellaf

Ajuda em duplicados

6 mensagens neste tópico

Boa noite

Sou novo nestas coisas e queria saber se me podiam ajudar num pequena coisa em SQL.

Como faço para que quando seleciona 2 atributos com datas, não se repitam. Eu fim uma pequena base de dados para uma parque de estacionamento onde faço o registo da hora de entrada e o registo da hora de saida, mas o que distingue a hora de entrada e hora de saida é o atributo entrada/saida o qual é preenchido com 'E' caso seja hora de entrada e com 'S' na hora saida, mas quando seleciono, aparece o seguinte (para a mesma entrada, mostra todas as saidas):

09/11/01 23:00:00    |      09/11/01 23:40:00

09/11/01 23:00:00    |      09/11/02 12:30:00

09/11/02 12:00:00    |      09/11/01 23:40:00

09/11/02 12:00:00    |      09/11/02 12:30:00

e o que deveria aparecer era:

09/11/01 23:00:00    |      09/11/01 23:40:00

09/11/02 12:00:00    |      09/11/02 12:30:00

e depois queria contabilizar o tempo que esteve no parque.

alguém me pode ajudar, sff.

Desde já obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas qual é a chave primária que tens na tabela? Convém teres um campo único. Se o tiveres, torna as coisas mais simples.

Apresenta a estrutura da tabela

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que base de dados estás a usar?

Em sql server podes usar o select distinct... para não teres os dados repetidos.

Depois para contar o tempo fazes uma query deste tipo:

select datediff( ver documentação ) from

(select distinct ...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A estrutura é esta para o parquee estou a usar em PostGres:

CREATE TABLE parque(

IdLocalP CHAR(10),

ValorMinuto NUMERIC,

PRIMARY KEY (IdLocalP),

FOREIGN KEY (Idlocalp) REFERENCES servico

);

CREATE TABLE tem(

IdLocalP CHAR(10),

idLocal CHAR(10),

PRIMARY KEY (idLocal),

FOREIGN KEY (Idlocalp) REFERENCES servico

);

CREATE TABLE cancela(

idLocal CHAR(10),

Entrada_Saida CHAR(1) CHECK(Entrada_Saida='E' OR Entrada_Saida='S'),

PRIMARY KEY (idLocal),

FOREIGN KEY (Idlocal) REFERENCES tem

);

CREATE TABLE passagem(

IdVIAVERDE INTEGER CHECK(IdVIAVERDE>0),

idLocal CHAR(10),

Data TIMESTAMP,

PRIMARY KEY (IdVIAVERDE,idLocal,Data),

FOREIGN KEY (IdVIAVERDE) REFERENCES clienteViaVerde,

FOREIGN KEY (Idlocal) REFERENCES tem

);

e o código que utilzei foi este:

select tabela2.idViaVerde, tabela2.idLocalP, tabela2.dataEntrada, passagem.data as dataSaida
from (select idViaVerde, parque.idLocalP, passagem.Data as dataEntrada
from passagem, cancela, tem, parque
where passagem.idLocal=cancela.idLocal and
cancela.idlocal=tem.idlocal and
tem.idlocalp=parque.idlocalp and
passagem.Data BETWEEN '09/11/01 00:00:00' and '09/11/30 23:59:59' and
passagem.idViaverde=123 and
cancela.entrada_saida='E') tabela2, passagem, cancela
where tabela2.idViaVerde=passagem.idViaverde and
passagem.idLocal=cancela.idlocal and
cancela.entrada_saida='S'
group by tabela2.idViaVerde,tabela2.idLocalP,tabela2.dataentrada, passagem.data;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Separar a data da hora e fazes um min e um max às horas e um group by pela data.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora