Ajuda em duplicados

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.

A estrutura para o parque 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;

alguém me pode ajudar, sff.

Desde já obrigado

Alguém me pode ajudar?

Pelo que percebo não há qualquer relação entre a entrada e a saida, assumindo que a saida correspondente à entrada é a saida seguinte mais próxima da entrada, certo?

Algo assim deve funcionar para o que queres

select e.idviaverde, e.id_local, e.data as data_entrada, (SELECT min(s.data) FROM passagem s, cancela c WHERE s.idviaverde = e.idviaverde and s.data > e.data and s.idlocal = c.idlocal and c.entrada_saida = 'S') as data_saida FROM passagem e, cancela c1 where e.id_viaverde = 123 and e.idlocal = c1.idlocal and c1.entrada_saida = 'E'

Sim, funciona perfeitamente.
Muito obrigado