none
Duvida select simples RRS feed

  • Pergunta

  • Pessoal,

    Desculpe ate postar isso, mas estou iniciando na profissão.

    no Select abaixo tenho um campo que chama VlrAutenticacao este campo é responsavel pelo valor que esta sendo autenticado no caixa, ou seja registra o valor.
    Porem pode ter estorno no caixa, e eu sempre preciso pegar o ultimo valor, ou seja registrou um valor 100, estornou o 100 porque estava errado, ai coloca-se o valor 50.

    50 é o ultimo, entao eu coloquei o seguinte select:

    Select distinct max(Convert(decimal(10,2),VlrAutenticacao))

    from tblWRICaixaAutenticacao

    where FK_tblWRIHistorico_ID = 1

    and NumeroDocumento = 106840

    Meu problema é que com isso, o select tras o maior valor e nao o ultimo.

    Na tabela tem um campo PK_ID, então eu precisava do select que me traz o ultimo valor, só que não necessariamente o maior.

    Entao acredito que eu teria que fazer dois selects um tambem com o campo pk_id correto?

    Como eu poderia fazer isso?


    terça-feira, 11 de junho de 2013 21:01

Respostas

  • Boa tarde,

    Não sei se entendi corretamente a questão, mas experimente dessa forma:

    Select top 1Convert(decimal(10,2),VlrAutenticacao)
    from tblWRICaixaAutenticacao
    where 
        FK_tblWRIHistorico_ID = 1 and 
        NumeroDocumento = 106840
    order by pk_id desc

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Diego_nogueira terça-feira, 11 de junho de 2013 21:20
    terça-feira, 11 de junho de 2013 21:05
  • É necessário entender melhor a estrutura das tabelas.

    Exemplo: digamos que você precise armazenar todas as alterações de valor de uma cabeçalho de nota. A tabela denotas é a TABCAB(ID, DATA)  dai você precisaria ter a tabela de histórico TABVLR_CAB(ID, VALOR, DATAINC),onde o campo ID tem uma FK com o ID da tabela TABCAB.

    Dai você inclui uma nota TABCAB(1, '11/06/2013')

    E o valor TABVLR_CAB(1, 100.00, '11/06/2013 17:00:03')

    Em um segundo momento  você altera o valor da nota incluindo o novo registro TABVLR_CAB(1, 50.00, '11/06/2013 17:10:05').

    Neste cenário você poderia fazer o seguinte select:

    SELECT C.ID, C.DATA, V.VALOR

    FROM TABCAB C

       , TABVLR_CAB V

    WHERE C.ID = 1

    AND V.ID = C.ID

    AND V.DATAINC = (SELECT MAX(DATAINC)

                                 FROM TABVLR_CAB VM

                                 WHERE VM.ID = C.ID)

    Com isto o valor válido será sempre o ultimo.

    Ou seja, só é possível quando você tem o histórico de alteração.

    • Marcado como Resposta Diego_nogueira terça-feira, 11 de junho de 2013 21:20
    terça-feira, 11 de junho de 2013 21:13

Todas as Respostas

  • Boa tarde,

    Não sei se entendi corretamente a questão, mas experimente dessa forma:

    Select top 1Convert(decimal(10,2),VlrAutenticacao)
    from tblWRICaixaAutenticacao
    where 
        FK_tblWRIHistorico_ID = 1 and 
        NumeroDocumento = 106840
    order by pk_id desc

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Diego_nogueira terça-feira, 11 de junho de 2013 21:20
    terça-feira, 11 de junho de 2013 21:05
  • É necessário entender melhor a estrutura das tabelas.

    Exemplo: digamos que você precise armazenar todas as alterações de valor de uma cabeçalho de nota. A tabela denotas é a TABCAB(ID, DATA)  dai você precisaria ter a tabela de histórico TABVLR_CAB(ID, VALOR, DATAINC),onde o campo ID tem uma FK com o ID da tabela TABCAB.

    Dai você inclui uma nota TABCAB(1, '11/06/2013')

    E o valor TABVLR_CAB(1, 100.00, '11/06/2013 17:00:03')

    Em um segundo momento  você altera o valor da nota incluindo o novo registro TABVLR_CAB(1, 50.00, '11/06/2013 17:10:05').

    Neste cenário você poderia fazer o seguinte select:

    SELECT C.ID, C.DATA, V.VALOR

    FROM TABCAB C

       , TABVLR_CAB V

    WHERE C.ID = 1

    AND V.ID = C.ID

    AND V.DATAINC = (SELECT MAX(DATAINC)

                                 FROM TABVLR_CAB VM

                                 WHERE VM.ID = C.ID)

    Com isto o valor válido será sempre o ultimo.

    Ou seja, só é possível quando você tem o histórico de alteração.

    • Marcado como Resposta Diego_nogueira terça-feira, 11 de junho de 2013 21:20
    terça-feira, 11 de junho de 2013 21:13
  • obrigado deu certo.

    abs

    terça-feira, 11 de junho de 2013 21:16