none
Retorno do último registro - MAX RRS feed

  • Pergunta

  • O que esta errado com essa rotina pois na minha tabela ela tem 7 registros e ela sempre seta o primeiro registro. Sendo o idMovimento - Identity e chave primaria?

     

    "SELECT MAX(idMovimento) AS Movimento, Abertura, Fechamento FROM tbl Movimento GROUP BY idMovimento, Abertura, Fechamento"

     

    Obs.: Qdo utilizo o valor de idMovimento após a consulta sempre retorna 1, e o último registro é 7.

     

    Utilizo o SQL Express 2005

    quinta-feira, 9 de agosto de 2007 02:35

Respostas

  • Olá Gutenberg,

     

    Considerando que seu idmovimento é um número crescente, uma alternativa pode ser;

     

    declare @last int

    declare @fechamento int -- depende aqui do seu tipo de dados para o campo fechamento

     

    SELECT TOP 1 @last=idmovimento, @fechamento=fechamento

    FROM tbmovimentos ORDER BY idmovimento DESC

    If @fechamento is null OR @fechamento = ''

    -- salva

    ELSE

    --faz qquer outra coisa

     

    Um abraço

    Nilton Pinheiro

    www.mcdbabrasil.combr

    PS: Foi útil para vc ? Então marque o post como útil !!

    quinta-feira, 9 de agosto de 2007 03:16
    Moderador
  •  

    Olá!

     

    Se você quiser pegar apenas o último, tem duas maneiras, a simples e a recomendada (por questão de desempenho), vamos a elas:

     

    Simples:

    SELECT TOP 1 IdMovimento, Fechamento, FROM tblMovimentos ORDER BY IdMovimento DESC

     

    Recomendada:

    SELECT IdMovimento, Fechamento FROM tblMovimentos

    WHERE IdMovimento = (SELECT MAX (IdMovimento) FROM tblMovimentos)

     

    Em ambas as formas serão retornadas as informações sobre o Fechamento. A verificação pode ser feita com uma variável, por exemplo, dentro do SELECT, pode colocar a coluna desta forma @Variavel = Fechamento, desta forma a variável vai receber o valor da coluna e poderá ser testada posteriormente.

     

     

    Se tiveres dúvidas, retorne.

     

     

     

    Abraço

    quinta-feira, 9 de agosto de 2007 03:21

Todas as Respostas

  • Obs.: Fiz um teste da seguinte forma:

     

    SELECT MAX(idMovimento) FROM tblMovimentos

     

    e o resultado foi 7

     

    Na realidade meu proposito é o seguinte: Verificar se no último registro da tblMovimentos o campo FECHAMENTO esta preenchido, se não estiver pego o idMovimento do último registro e salvo no My.Settings. Se houver uma forma melhor de fazer essa verificação...

    quinta-feira, 9 de agosto de 2007 03:00
  • Olá Gutenberg,

     

    Considerando que seu idmovimento é um número crescente, uma alternativa pode ser;

     

    declare @last int

    declare @fechamento int -- depende aqui do seu tipo de dados para o campo fechamento

     

    SELECT TOP 1 @last=idmovimento, @fechamento=fechamento

    FROM tbmovimentos ORDER BY idmovimento DESC

    If @fechamento is null OR @fechamento = ''

    -- salva

    ELSE

    --faz qquer outra coisa

     

    Um abraço

    Nilton Pinheiro

    www.mcdbabrasil.combr

    PS: Foi útil para vc ? Então marque o post como útil !!

    quinta-feira, 9 de agosto de 2007 03:16
    Moderador
  •  

    Olá!

     

    Se você quiser pegar apenas o último, tem duas maneiras, a simples e a recomendada (por questão de desempenho), vamos a elas:

     

    Simples:

    SELECT TOP 1 IdMovimento, Fechamento, FROM tblMovimentos ORDER BY IdMovimento DESC

     

    Recomendada:

    SELECT IdMovimento, Fechamento FROM tblMovimentos

    WHERE IdMovimento = (SELECT MAX (IdMovimento) FROM tblMovimentos)

     

    Em ambas as formas serão retornadas as informações sobre o Fechamento. A verificação pode ser feita com uma variável, por exemplo, dentro do SELECT, pode colocar a coluna desta forma @Variavel = Fechamento, desta forma a variável vai receber o valor da coluna e poderá ser testada posteriormente.

     

     

    Se tiveres dúvidas, retorne.

     

     

     

    Abraço

    quinta-feira, 9 de agosto de 2007 03:21
  • Oi Nilton Pinheiro muito obrigado... resolveu.

     

    Só uma dúvida pq a rotina que informei no início não funcionou, pesquisei aqui no forum e encontrei diversos post ensinando daquela maneira.

     

    quinta-feira, 9 de agosto de 2007 03:54
  • Oi Alexandre VM...

     

    Eu faço a pesquisa assim (dentro do VB.net):

     

    cnn.ConnectionString = minhaconexão

    sqlComando.CommandText = "SELECT idMovimento, Fechamento FROM tblMovimento WHERE idMovimento = (SELECT MAX(idMovimento) FROM tblMovimentos)

     

    dentro do que passei agora, aonde eu colocaria a @Variavel = Fechamento, preciso declarar? aonde? como?

     

    Desculpe a ignorância...

     

    quinta-feira, 9 de agosto de 2007 04:20
  •  

    Olá!

     

    Bem, você pode fazer a criação de uma procedure e essa variável seria de retorno. Tente fazer desta maneira, se não conseguir, retorne.

     

     

    Abraço

    quinta-feira, 9 de agosto de 2007 12:50