none
Trazer ultimo registro pela data RRS feed

  • Pergunta

  • Ola forum.

    Preciso da ajuda de vcs.

    tenho esta query abaixo e preciso trazer o ultimo registro por data que contenha valor no campo B9_CM1

    SELECT
    MAX(B9_DATA) AS DT
    ,B9_COD
    ,B9_CM1
    FROM SB9020
    WHERE B9_LOCAL = '01'
    AND B9_COD = '000611'
    AND SB9020.D_E_L_E_T_ = ''
    GROUP BY  B9_COD, B9_CM1
    ORDER BY B9_COD

    Desde já agradesço.


    JUNIOR GUERREIRO T.I

    sexta-feira, 9 de setembro de 2022 16:34

Respostas

  • Nesse caso é necessário reformular a query.

    Segue sugestão utilizando a função Row_Number para classificar as linhas por data com partições por item:

    with CTE_RN as
    (
        SELECT
            B9_DATA,
            B9_COD,
            B9_CM1,
            ROW_NUMBER() OVER(PARTITION BY B9_COD ORDER BY B9_DATA DESC) AS RN
        FROM SB9020
        WHERE 
            B9_LOCAL = '01' AND 
            B9_CM1 > 0 AND
            SB9020.D_E_L_E_T_ = ''
    )
    
    SELECT
        B9_DATA AS DT,
        B9_COD,
        B9_CM1
    FROM CTE_RN
    WHERE
        RN = 1
    ORDER BY
        B9_COD
    

    Espero que ajude


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

    • Marcado como Resposta Junior Guerreiro sexta-feira, 9 de setembro de 2022 18:52
    sexta-feira, 9 de setembro de 2022 18:44

Todas as Respostas

  • Boa tarde,

    Acho que você precisa postar mais informações sobre a questão, se puder postar por exemplo um exemplo de resultado retornado por essa query e como você quer que fique esse mesmo resultado, acho facilitaria o entendimento da questão.


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

    sexta-feira, 9 de setembro de 2022 17:05
  • desculpe segue o resultado da query

    DT	          B9_COD	        B9_CM1
    20220731	  000611         	0
    20150531	  000611         	44,86
    20160531	  000611         	49,8198
    20151031	  000611         	50,259
    20150731	  000611         	50,2591
    20160229	  000611         	50,2592
    20150630	  000611         	55,5348


    JUNIOR GUERREIRO T.I



    sexta-feira, 9 de setembro de 2022 17:15
  • O que está faltando (ou sobrando) nesse resultado? Como deveria ficar?

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

    sexta-feira, 9 de setembro de 2022 17:48
  • preciso que traga somente este resultado, a ultima data ou seja a maior data com o resultado da coluna B9_CM1 com o valor na data. ou seja me trazer a ultima data com valor.

    DT	          B9_COD	        B9_CM1
    20160531	  000611         	49,8198
    
    
    


    JUNIOR GUERREIRO T.I



    sexta-feira, 9 de setembro de 2022 17:51
  • Experimente dessa forma:

    SELECT TOP(1)
        MAX(B9_DATA) AS DT,
        B9_COD,
        B9_CM1
    FROM SB9020
    WHERE 
        B9_LOCAL = '01' AND 
        B9_COD = '000611' AND 
        B9_CM1 > 0 AND
        SB9020.D_E_L_E_T_ = ''
    GROUP BY
        B9_COD, 
        B9_CM1
    ORDER BY 
        DT DESC

    Espero que ajude


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

    sexta-feira, 9 de setembro de 2022 18:10
  • Muito obrigado pela ajuda, e isso mesmo que preciso, agora como fazer pra que esta query rode para um numero grande de itens, porque e=nesta query estou pegando um unico item, mas minha tabla de varios itens.

    SELECT TOP(1)
        MAX(B9_DATA) AS DT,
        B9_COD,
        B9_CM1
    FROM SB9020
    WHERE 
        B9_LOCAL = '01' AND 
        B9_COD = '000611' AND --- tirar esta opção, e não filtar por item 
        B9_CM1 > 0 AND
        SB9020.D_E_L_E_T_ = ''
    GROUP BY
        B9_COD, 
        B9_CM1
    ORDER BY 
        DT DESC


    JUNIOR GUERREIRO T.I

    sexta-feira, 9 de setembro de 2022 18:20
  • Nesse caso é necessário reformular a query.

    Segue sugestão utilizando a função Row_Number para classificar as linhas por data com partições por item:

    with CTE_RN as
    (
        SELECT
            B9_DATA,
            B9_COD,
            B9_CM1,
            ROW_NUMBER() OVER(PARTITION BY B9_COD ORDER BY B9_DATA DESC) AS RN
        FROM SB9020
        WHERE 
            B9_LOCAL = '01' AND 
            B9_CM1 > 0 AND
            SB9020.D_E_L_E_T_ = ''
    )
    
    SELECT
        B9_DATA AS DT,
        B9_COD,
        B9_CM1
    FROM CTE_RN
    WHERE
        RN = 1
    ORDER BY
        B9_COD
    

    Espero que ajude


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

    • Marcado como Resposta Junior Guerreiro sexta-feira, 9 de setembro de 2022 18:52
    sexta-feira, 9 de setembro de 2022 18:44
  • Muito obrigado pela ajuda.

    JUNIOR GUERREIRO T.I

    sexta-feira, 9 de setembro de 2022 18:52