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

Duvida em SQL

Discussão em 'Programação' iniciada por abgma, 13 de Junho de 2009. (Respostas: 9; Visualizações: 635)

  1. abgma

    abgma Power Member

    Olá a todos.

    Tenho uma base de dados que contem uma tabela que contem dados de uma loja. A informação que a tabela contem é a seguinte:

    -Primeiro nome da pessoa que visitou a loja
    -Apelido da pessoa que visitou a loja
    -Valor das compras que vez.
    -Data da visita.
    -Hora da visita.


    Eu queria agora fazer um query que contem o primeiro e ultimo nome de cada visitante, assim como a data e hora da sua ultima visita. O meu problema está no facto que uma pessoa pode ter visitado a loja diversas vezes. Há alguma maneira de fazer isto?

    Cumps
    Abgma
     
  2. Jester_NG

    Jester_NG Power Member

    se a tabela nos campos "data visita" e "hora visita" for actualizada sempre que haja uma visita do visitante não vejo problema nenhum. a não ser que para cada participante queiras guardar várias visitas, nesse caso precisas de criar uma tabela com as visitas de cada participante.
     
  3. abgma

    abgma Power Member

    pois. Eu quero guardar todas as visitas de cada cliente. isto dá jeito para outras coisas como, por exemplo, saber o valor médio das compras de cada cliente, hora habitual das visitas, etc. Assim sendo, a tabela tem o seguinte aspecto.

    Primeiro_Nome | Apelido | Valor | Data_Visita | Hora_Visita |
    Miguel | Pereira | 20.04 | 01-05-2009 | 15:30 |
    João | Dias | 29.34 | 01-05-2009 | 18:32 |
    Miguel | Pereira | 2.33 | 03-05-2009 | 10:02 |
    João | Dias | 220.04 | 05-05-2009 | 11:05 |
    Rita | Lopes | 43.88 | 05-05-2009 | 9:30 |


    É um exemplo algo exagerado, mas acho que prova o meu ponto com os exemplos do Miguel e do João. Eu quero ter lá as entradas todas deles, mas fazer uma query em que apareça apenas a ultima entrada deles (assim como da Rita Lopes).

    Agradecia mesmo umas dicas.

    Cumps
    Abgma
     
  4. Slash

    Slash Power Member

    Fazes a query com ordenacao na data e hora (ou concatenação delas) e sacas apenas o primeiro elemento..
     
  5. abgma

    abgma Power Member

    Realmente é o que tenho feito. Tenho feito um query com essa mesma ordenação e depois uma aplicação em java faz a leitura da base de dados e saca apenas a primeira entrada de cada cliente. No entanto, gostaria de fazer isto sem ter de recorrer ao java ou outra aplicação qualquer. É possível retirar a primeira entrada recorrendo apenas e só ao SQL?

    Cumps
    Abgma
     
  6. Ignoto_Deo

    Ignoto_Deo Power Member

    Código:
     select top 1 from tabela where Nome = 'Nome' order by    Data_Visita DESC   
    qualquer coisa assim,
     
  7. abgma

    abgma Power Member

    a keyword Top 1 era-me desconhecida. já é um passo grande no caminho de aonde quero ir. mas ainda tá um problema. No teu select statement, tens where nome='nome'. mas eu queria a ultima visita de cada utilizador. É possível fazer isto com apenas um select statement?
     
  8. Slash

    Slash Power Member

    Em mysql podes usar

    select * from tabela where Nome = 'Nome' order by Data_Visita DESC limit 1
     
  9. Ignoto_Deo

    Ignoto_Deo Power Member

    tão, se queres a ultima visita de um utilizador, vais ter de lhe passar o nome do utilizador, então a clausula where vai ser primeiro_nome = 'primeiro nome' and apelido = 'apelido'

    vai ficar do estilo

    Código:
    select top 1 from tabela where primeiro_nome = 'primeiro_nome' and apelido = 'apelido' order by data Desc
    em mySql pode ser

    Código:
    select * from tabela where Nome = 'Nome' and Apelido = 'Apelido' order by Data_Visita DESC limit 1 	 
     
  10. kzip

    kzip Power Member

    Qual a implementação de SQL que estás a usar? não tem um tipo de dados "DateTime"? Facilitava a query se usasses só um campo para Data+Hora. Bastava:

    SELECT NOME, APELIDO, MAX(DATA_HORA) AS DT_ULTIMA_VISITA
    FROM TABELA
    GROUP BY NOME, APELIDO
     

Partilhar esta Página