pascasso
09-11-2007, 23:31
boas,
existem algum statement de SQL que nos dê linhas onde um valor numa linha se repete?
Isto é, imaginem que eu tenho:
ID NOME DATA DE NASC.
4 João Miguel 12/12/1988
5 Jorge Álvaro 12/12/1988
6 Luís Almeida 23/11/1956
Agora imaginem isto com 7678 linhas... o que eu queria saber era se havia por exemplo, uma data de nascimento repetida... eu nao lhe estou a perguntar para me mostrar pessoas com uma determinada data de nascimento dada por mim, quero apenas saber se existem datas de nascimento repetidas... entre 7678 resultados...
boas,
existem algum statement de SQL que nos dê linhas onde um valor numa linha se repete?
Isto é, imaginem que eu tenho:
ID NOME DATA DE NASC.
4 João Miguel 12/12/1988
5 Jorge Álvaro 12/12/1988
6 Luís Almeida 23/11/1956
Agora imaginem isto com 7678 linhas... o que eu queria saber era se havia por exemplo, uma data de nascimento repetida... eu nao lhe estou a perguntar para me mostrar pessoas com uma determinada data de nascimento dada por mim, quero apenas saber se existem datas de nascimento repetidas... entre 7678 resultados...
SELECT DATA_DE_NASC, COUNT(DATA_DE_NASC) FROM [TABELA] GROUP BY DATA_DE_NASC
slack_guy
10-11-2007, 11:50
Se queres saber quantas (e não quais) datas repetidas existem, podes fazer assim:
SELECT
(
SELECT
COUNT(data_nasc)
FROM
minha_tabela
)
-
(
SELECT
COUNT(DISTINCT data_nasc)
FROM
minha_tabela
) AS repetidas;
O resultado seria qualquer coisa como:
repetidas
-----------
175
(1 row)
pascasso
10-11-2007, 13:58
Eu queria mesmo saber quais...
e queria que o resultado fosse mais ou menos assim:
baseado-me na tabela anterior, se eu pedisse por repetidas queria que me desse isto:
ID NOME DATA DE NASC.
4 João Miguel 12/12/1988
5 Jorge Álvaro 12/12/1988
E se houvesse mais repetidos ele ordenava assim, por exemplo:
ID NOME DATA DE NASC.
4 João Miguel 12/12/1988
5 Jorge Álvaro 12/12/1988
7 Pedro Vales 11/2/1966
23 Nuno Costa 11/2/1966
443 Claúdia Azevedo 11/2/1966
756 Rita Mendes 7/5/1961
833 Rodrigo Leitão 7/5/1961
Apesar da ordem de a data de nascimento estar decrescente e a ordem dos ID's estar crescente não quer dizer nada foi apenas registos inventados agora.
slack_guy - Usaste aí o MySQL, esse statement também pode ser usado para Access?
slack_guy
10-11-2007, 14:21
slack_guy - Usaste aí o MySQL, esse statement também pode ser usado para Access?
No meu exemplo testei com PostgreSQL, mas qualquer SGBD que permita subselects permite o mesmo. Quanto ao Access, desconheço.
spastikman
10-11-2007, 14:54
Funciona em qualquer SGBD que use o standard SQL 2003. Access penso que cumpre os requisitos.
Para retornar as linhas em que há datas repetidas basta:
SELECT ID, NOME, DATA
FROM TABELA
WHERE DATA IN
(SELECT DATA
FROM TABELA
GROUP BY DATA
HAVING COUNT(*) >1
)
Se também quiseres saber quantas vezes aparece cada data repetida, então:
SELECT A.ID, A.NOME, A.DATA, B.QT
FROM TABELA AS A
INNER JOIN (
SELECT DATA,COUNT(*) AS QT
FROM TABELA
GROUP BY DATA
HAVING COUNT(*) >1) AS B
ON A.DATA=B.DATA
pascasso
11-11-2007, 13:24
boas,
grande obrigado a todos. Vou experimentar os vossos exemplos, já digo qualquer coisa.