1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

SQL

Discussão em 'Programação' iniciada por pascasso, 9 de Novembro de 2007. (Respostas: 7; Visualizações: 1256)

  1. pascasso

    pascasso Power Member

    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...
     
  2. nsilvio

    nsilvio Power Member

    SELECT DATA_DE_NASC, COUNT(DATA_DE_NASC) FROM [TABELA] GROUP BY DATA_DE_NASC
     
  3. slack_guy

    slack_guy Power Member

    Se queres saber quantas (e não quais) datas repetidas existem, podes fazer assim:
    Código:
    SELECT
        (
            SELECT
                COUNT(data_nasc)
            FROM
                minha_tabela
         ) 
         -
         (
            SELECT
                 COUNT(DISTINCT data_nasc)
            FROM
                 minha_tabela
         ) AS repetidas;
    
    O resultado seria qualquer coisa como:
    Código:
     repetidas
    -----------
           175
    (1 row)
    
     
    Última edição: 10 de Novembro de 2007
  4. pascasso

    pascasso Power Member

    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?
     
  5. slack_guy

    slack_guy Power Member

    No meu exemplo testei com PostgreSQL, mas qualquer SGBD que permita subselects permite o mesmo. Quanto ao Access, desconheço.
     
  6. spastikman

    spastikman Banido

    Funciona em qualquer SGBD que use o standard SQL 2003. Access penso que cumpre os requisitos.
     
  7. kzip

    kzip Power Member

    Para retornar as linhas em que há datas repetidas basta:
    Código:
    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:

    Código:
    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
     
  8. pascasso

    pascasso Power Member

    boas,

    grande obrigado a todos. Vou experimentar os vossos exemplos, já digo qualquer coisa.
     

Partilhar esta Página