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

Dúvida em interrogação SQL

Discussão em 'Programação' iniciada por NQ, 28 de Abril de 2005. (Respostas: 8; Visualizações: 1019)

  1. NQ

    NQ Power Member

    Boas

    Sabem alguma maneira de resolver isto:

    Tenho uma tabela na forma

    Letra ... ... ...
    X
    X
    Y
    Y
    Z
    Z

    Já estão ordenados pelos critérios que quero, sendo que o 1º é a Letra. Quero agora sacar desta tabela apenas a 1ª ocorrência de cada letra.

    Sei que dá com um Partition usando um Row Number e depois sacar o Row Number = 1. Mas penso que dá para fazer com outra coisa mais simples, mas não consigo descobrir.


    Obrigado
     
  2. Biker_

    Biker_ Power Member

    Estou a ver que andaste a ter explicações de alguém... :-D
    É essa a melhor maneira. Queres ainda mais fácil que isso?! :P
    Btw, sabes que o prof tb vê este fórum? :D
     
  3. O que tu pretendes não será isto?

    SELECT DISTINCT Coluna FROM Tabela ORDER BY Coluna ASC


    Pelo que entendi, isto serve-te...
     
  4. NoMercy

    NoMercy Power Member

    Seria melhor que dissesses logo que bd estás a usar. "Partition" e "Row Number=1" em SQL não estou a ver, talvez estejas a falar de uma linguagem especifica para uma determinada BD...
    Acho que a "query" que o PreciousWhore te indicou, serve.
     
  5. Biker_

    Biker_ Power Member

    Pois, o gajo deixou a cena bué incompleta....
    É programação sobre um bd em Oracle.
    O que o PreciousWhore disse não dá pq na verdade em cada linha da tabela não temos apenas uma coluna, como dá a entender pelo NQ, temos várias colunas, em que apenas uma terá o identificador pelo qual não queremos repetições desse mm identificador.
    Daí, a única maneira que consegui por a funcionar, dp de experimentar MTA coisa, foi mm com o PARTITION BY auxiliado pelo ROW NUMBER().
     
  6. Andr0m3da

    Andr0m3da Power Member

    o rownum é manhoso, n te faz o que tu queres.
    tens de ter uma coisa em atenção, por exemplo se tornares o query mais complexo o rownum não segue um order by.

    a primeira ocorrencia de uma letra.. ok, mas a letra em um id indexado?
     
    Última edição: 29 de Abril de 2005
  7. Andr0m3da

    Andr0m3da Power Member

    este query em oracle simplesmente te dá uma valor por cada "coluna" que tiveres, e ordena-te "posteriormente" o resultado.
    ou seja do ponto de vista do que ele pediu, está completamente errado
     
  8. Biker_

    Biker_ Power Member

    É ROW_NUMBER() e não apenas o ROWNUM.
    É tipo SELECT ..., ROW_NUMBER() OVER (PARTITION BY id... ORDER BY ...) ...
    Desta maneira faz com que seja criada a nova coluna onde vão estar os valores criados pela ROW_NUMBER(), fazendo com que o número seja de 1 a X, sendo o X a última linha com o "id" pretendido. Claro que isto fica ordenado pelos requisitos pretendidos, ou seja, o valor de cada "id" que pretendemos vai ficar com o valor 1 na coluna do ROW_NUMBER(), pelo que é só escolher essas.
    O complicado era chegar ao "PARTITION BY", tb precisei de ajuda, esse gajo é que é calão demais para mm dp de saber a resposta quase completa ir ver como se usa o comando. :lol:
     
  9. NQ

    NQ Power Member

    As ... ... ... eram mais colunas

    :P


    O partition mais o row number funciona perfeitamente, o DISTINCT realmente é completamente inadequado para o pretendido.

    Acho que vai mesmo como tá :P
     

Partilhar esta Página