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

SQL SERVER novamente

Discussão em 'Programação' iniciada por jonassavimby, 6 de Maio de 2009. (Respostas: 19; Visualizações: 932)

  1. jonassavimby

    jonassavimby Power Member

    Estou a anhar com esta cena :confused::confused:

    Tenho esta tabela:

    UPDATE

    2009-01-14 14:54:56.467
    2009-01-14 14:56:36.500
    2009-01-14 14:58:53.350
    2009-01-14 14:58:55.520
    2009-01-14 15:02:46.903
    2009-01-14 15:03:01.047
    2009-01-14 15:03:25.030
    2009-01-14 15:03:27.640
    2009-01-14 15:04:44.503
    2009-01-14 15:04:58.287
    2009-01-14 15:11:15.347
    2009-01-14 15:11:15.410
    2009-01-14 15:43:02.513
    2009-01-14 16:11:18.907
    2009-01-15 13:21:35.160
    2009-01-15 13:51:40.310
    2009-01-15 14:01:22.970
    2009-01-15 14:42:20.440
    2009-02-11 10:35:05.957
    2009-02-11 10:36:19.570
    2009-02-23 15:53:28.077

    keria ter uma tabela com:

    UPDATE2

    2009-01-14 16:11:18.907
    2009-01-15 14:42:20.440
    2009-02-11 10:36:19.570
    2009-02-23 15:53:28.077

    Isto é queria as ultimas datas.:(:(

    Agradecia imenso a ajuda.
     
  2. Refugado

    Refugado Power Member

    Não tens mais nenhuma campo na primeira tabela?
    Assim era mais façil através do 'where', caso essa coluna fosse igual nas últimas entrada.


    Existe o 'Select TOP x' mas não sei se faz bem o que queres.
     
  3. jonassavimby

    jonassavimby Power Member

    eu keria pois, era que devolvese o ultimo update de cada dia.

    :confused:
     
  4. ribeiro55

    ribeiro55 Power Member

    Não pude conter uma gargalhada ali com o nick "Refugado" :p:p:p:p

    Usa o TOP como sugerido, mas acrescenta-lhe um ORDER.
    Assim já tens os valores que queres.
     
  5. jonassavimby

    jonassavimby Power Member

    Boas pessoal,

    Mas o TOP só devolve as 5 primeiras, neste caso se fizer:

    TOP 3 à tabela UPDATE, vai me devolver só

    2009-01-14 14:54:56.467
    2009-01-14 14:56:36.500
    2009-01-14 14:58:53.350

    e não

    2009-01-14 16:11:18.907
    2009-01-15 14:42:20.440
    2009-02-11 10:36:19.570

    que são dias diferentes.:(:(:(

    Mas obrigado pela ajuda
     
  6. ribeiro55

    ribeiro55 Power Member

    Então, primeiro ordenas, e depois é que sacas o top.
     
  7. Peddro

    Peddro [email protected] Member

    Uma maneira...

    GROUP BY (por datas) e MAX (da hora) ;)
     
  8. Peddro

    Peddro [email protected] Member

    Vá... vou dar a solução...

    Nada de ORDER BY...

    Reparem:

    SELECT Max(Table1.Field) AS MaxOfField
    FROM Table1
    GROUP BY Format(Field,"dd-mm-yyyy")

    ;)
     
  9. ribeiro55

    ribeiro55 Power Member

    Boa solução se ele quiser apenas UM registo. (Não conhecia o MAX, por acaso :) ty)
    Acho que quer vários, portanto lá temos de voltar às ordenações.
     
  10. AliFromCairo

    AliFromCairo Power Member

    Podes utilizar o GROUP BY e o ORDER BY.
     
  11. Peddro

    Peddro [email protected] Member

    Desculpa mas eu introduzi todos os dados e depois a query devolve os dados que são pretendidos.

    As ordenações neste caso de nada servem...
     
  12. Homem do Saco

    Homem do Saco Power Member

    ORGER BY data e LIMIT número de datas?

    Nada como googlar um pouco...
     
  13. ribeiro55

    ribeiro55 Power Member

    Se exprimentaste isso mesmo com dados quem pede desculpa sou eu.
    Estou a mandar postas de pescada sem base experimental.
    jonassavimby, dá depois um feedback.
     
  14. kzip

    kzip Power Member

    SELECT TOP 4 <<campodata>>
    FROM <<tabela>>
    ORDER BY <<campodata>> DESC

    ;)
     
  15. Peddro

    Peddro [email protected] Member

    Seria este o resultado:

    2009-02-23 15:53:28.077
    2009-01-15 14:42:20.440
    2009-01-15 14:01:22.970
    2009-01-15 13:51:40.310

    e não é isso que se pretende...:rolleyes:
     
  16. kzip

    kzip Power Member

    Pediam-se os registos, não a ordenação. Mas que não seja por isso... :007:

    SELECT <<campodata>>
    FROM (
    SELECT TOP 4 <<campodata>>
    FROM <<tabela>>
    ORDER BY <<campodata>> DESC)
    ORDER BY <<campodata>>


    ... penso eu de que! :o
     
  17. AliFromCairo

    AliFromCairo Power Member

    Boas, não tem tanto a ver com a ordenação, mas sim com o facto de o autor da thread pretender datas distintas (ignorando o time [hh:mm:ss]), como se pode observar pelo exemplo colocado no post inicial.

    De qualquer das formas, a solução já aqui foi colacada; apenas é necessário utilizar a função convert ao invés do format.
     
  18. pesta

    pesta Power Member

    Código:
    SELECT MAX(coluna) AS max_coluna
    FROM tabela
    GROUP BY DAYOFYEAR(coluna), YEAR(coluna)
    Assumindo que queres o último valor de cada dia.
     
  19. kzip

    kzip Power Member

    ok, tens razão. não tinha interpretado correctamente o que o autor queria dizer com as "últimas datas". Sim, a solução é recorrendo à função max() e agrupar pela parte inteira da data.
     
  20. jonassavimby

    jonassavimby Power Member

    obrigado

    Pessoal obrigado pelas dicas, e a nivel de SQL resolvia a situação. :001::001:

    Assim tb fiquei a saber mais umas coisas.

    O problema é que estou a utilizar uma ferramenta de reports, e tenho de transportar para lá as minhas Data Sources e dps fazer ligações entre elas, mas quando kero fazer o MAX, o gajo não me deixa, nem Distinct... estou ****** com esta cena..


    O programa é o ChangePoint e a ferramenta é o "Report Design". Alguem conhece?

    Mas obrigado na mesma
     

Partilhar esta Página