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

Para o ppl perito em SQL

Discussão em 'Programação' iniciada por RicardoSilva, 23 de Fevereiro de 2007. (Respostas: 16; Visualizações: 1445)

  1. RicardoSilva

    RicardoSilva Power Member

    Boas pessoal!
    Estou aqui com um problemazito... é assim:

    Tenho de fazer uma querie a uma view que contem todas as visitas feitas por um vendedor, e pretendo que a querie me retorne a ultima visita feita a cada cliente.

    Logo aqui temos 2 problemas :
    1º - tem de ser a ultima visita
    2º - tem de ser para cada cliente

    Imaginem algo do estilo

    01-02-2006 Cliente1 Vendedor2 Fld1 Fld2 Fld3 Fld4
    01-02-2006 Cliente2 Vendedor2 Fld1 Fld2 Fld3 Fld4
    02-02-2006 Cliente3 Vendedor2 Fld1 Fld2 Fld3 Fld4
    03-02-2006 Cliente1 Vendedor2 Fld1 Fld2 Fld3 Fld4
    04-02-2006 Cliente1 Vendedor2 Fld1 Fld2 Fld3 Fld4
    05-02-2006 Cliente2 Vendedor2 Fld1 Fld2 Fld3 Fld4
    05-02-2006 Cliente3 Vendedor2 Fld1 Fld2 Fld3 Fld4


    e pretendo que me retorne algo do tipo:

    04-02-2006 Cliente1 Vendedor2 Fld1 Fld2 Fld3 Fld4
    05-02-2006 Cliente2 Vendedor2 Fld1 Fld2 Fld3 Fld4
    05-02-2006 Cliente3 Vendedor2 Fld1 Fld2 Fld3 Fld4

    Agradeço a voça ajuda ppls!! :x2:
     
    Última edição: 23 de Fevereiro de 2007
  2. Feiticeiro

    Feiticeiro Power Member

    É para isso que serve o "order by"...
     
  3. RicardoSilva

    RicardoSilva Power Member

    Só mesmo um feiticeiro para sómente com um ORDER BY fazer tudo aquilo!! :002: :002:

    Obrigado amigo... já agr podes mustrar-me como farias??
     
  4. capricorn

    capricorn Power Member

    é isto que queres?
     
  5. RicardoSilva

    RicardoSilva Power Member

    Não amigo não é isso...

    Deverei de ter de fazer algo do tipo :

    SELECT TOP * FROM visitas ORDER BY cliente = 'cliente1' dataVisita DESC
    (para me dar a ultima visita do 'cliente1' .)

    Acontece que quero algo automático... não pretendo estar a fazer multiplos selects pelo nome do cliente... Não faz sentido!


    Até pk pretendo fazer um unico select pelo nome no vendedor para que me seja devolvido a ultima visita de cada médico visitado por aquele vendedor!

    Obrigado pela ajuda!:x2:
     
  6. capricorn

    capricorn Power Member

    Realmente tens razão, eu só ordenei no final, para ordenar antes é necessário usar uma subquery:
    A ver se desta vez estou certo ;)
     
  7. RicardoSilva

    RicardoSilva Power Member

    pois...

    na deve-mos andar mto longe mas... está a dar-me este erro :

    "The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unless TOP is also specified."

    é este o select que estou a fazer:

    Vê lá o k axas...

    SELECT * FROM
    (SELECT * FROM vVisitas4ReportPDF ORDER BY visitaData DESC)
    AS teste GROUP BY teste.visitaNome

    Obg.
     
  8. Tuaregue

    Tuaregue Power Member

    com o comando LAST isso n vai lá? Ou com o DISTINCT?
     
  9. JPgod

    JPgod Moderador
    Staff Member

    Distinct deve funcionar, porque este remove os duplicados, o que parece que está a acontecer...

    E uma ordenação por data? Visto que é a ultima visita, tens que ir buscar ao dia mais recente...
     
  10. RicardoSilva

    RicardoSilva Power Member

    Boas destr0yer De que forma é que sugeres que faça esse distinct ou Last?
     
  11. Tuaregue

    Tuaregue Power Member

    posso ser um ***? posso? é pá pega no manual e lê! vai testando até podes encontrar algumas coisas mais úteis. Não leves a mal, mas não estejas à espera que o pessoal faça o trabalho por ti.
     
  12. RicardoSilva

    RicardoSilva Power Member

    Eu percebo a tua cena acontece.. que o distinct é feito ou por 1 campo ou por mais que um ... e se eu o faço por aquele que quero... ele vai-me devolver realmente os valores distintos mas só para esse campo... se faço por vários acontece... que me vai returnar tudo pk de uma forma ou de outra cada row é diferente :S

    só pretendia entender de que forma é que estavas a penssar fazer o distinct.

    De qq forma obg pela ajuda! (TUAREGUE)
     
  13. spastikman

    spastikman Banido


    SELECT DISTICNT FROM
    (SELECT TOP * FROM vVisitas4ReportPDF ORDER BY visitaData DESC)
    AS teste GROUP BY teste.visitaNome
     
  14. spastikman

    spastikman Banido

    penso que a sintaxe não tá 100% correcta, mas é algo deste genero (só verificando o manual).
     
  15. K0mA

    K0mA Power Member

    Não sendo um entendido em SQL em primeiro lugar há que dizer que os dados não estão normalizados...

    DATA(n) CLIENTE(i) VENDEDOR(j)

    Selecionar o valor mais alto de DATA Group by CLIENTE
     
  16. capricorn

    capricorn Power Member

    a minha sugestão á a de cima mas sem utilizares Views (ou criares uma view ordenada por data)
     

Partilhar esta Página