none
Pesquisa em BD RRS feed

  • Pergunta

  • Bom dia.

    Solicito uma vez mais a vossa ajuda.

    Necessito de verificar uma BD (ex. abaixo) e obter o ultimo ano e o último mês pago por nº de cliente.

    Estou a executar a query com recurso ao MAX(campo) no entanto não esta a dar o resultado pretendido.

    no mês, por ex., o ultimo pago é sempre 12 pois existem sempre pagamentos em anos anteriores no mês 12.

    não me retorna o ultimo mês pago do ultimo ano.

    agradeço a vossa ajuda.

    Tabela ex.

    Nº| Ano  | Mês| Pago
    1  |2016 | 1    | True
    1  |2016 | 2    | True
    1  |2016 | 3    | False
    ...
    2  |2015| 8     | True
    2  |2015| 9     | False
    ...
    3  |2016|12    | True
    3  |2017|1      | True
    3  |2017|2      | False

    Resultado pretendido:

    Nº | Ano | Mês
    1   |2016| 2
    2   |2015| 8
    3   |2017| 1

    segunda-feira, 4 de dezembro de 2017 09:51

Respostas

  • Não entendi sua dificuldade nesse problema , apenas uma query agrupada, 

    se for isso que realmente que vc precisa

    DECLARE @tabela TABLE
    (
        Numero INT,
        Ano INT,
        Mes INT,
        Pago NCHAR(5)
    );
    INSERT INTO @tabela
    (
        Numero,
        Ano,
        Mes,
        Pago
    )
    VALUES
    (1, 2016, 1, 'True'),
    (1, 2016, 2, 'True'),
    (1, 2016, 3, 'False'),
    (2, 2015, 8, 'True'),
    (2, 2015, 9, 'False'),
    (3, 2016, 12, 'True'),
    (3, 2017, 1, 'True'),
    (3, 2017, 2, 'False');
    
    
    SELECT t.Ano,
           Numero = MAX(t.Numero),
           Mes = MAX(t.Mes),
           t.Pago
    FROM @tabela AS t
    WHERE t.Pago = 'True'
    GROUP BY t.Ano,
             t.Pago
    ORDER BY Numero;

    "Se a resposta for útil ou ajudar ,não esqueça de marcar"


    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 




    Wesley Neves

    segunda-feira, 4 de dezembro de 2017 10:25
  • Bom dia,

    Nuno, experimente mais ou menos dessa forma:

    with CTE_RN as
    (
        select
            *,
            ROW_NUMBER() OVER(PARTITION BY Numero ORDER BY Ano DESC, Mes Desc) as RN
        from Tabela
        where
            Pago = 'True'
    )
    
    select * 
    from CTE_RN
    where RN = 1

    Espero que ajude


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

    segunda-feira, 4 de dezembro de 2017 11:32

Todas as Respostas

  • Não entendi sua dificuldade nesse problema , apenas uma query agrupada, 

    se for isso que realmente que vc precisa

    DECLARE @tabela TABLE
    (
        Numero INT,
        Ano INT,
        Mes INT,
        Pago NCHAR(5)
    );
    INSERT INTO @tabela
    (
        Numero,
        Ano,
        Mes,
        Pago
    )
    VALUES
    (1, 2016, 1, 'True'),
    (1, 2016, 2, 'True'),
    (1, 2016, 3, 'False'),
    (2, 2015, 8, 'True'),
    (2, 2015, 9, 'False'),
    (3, 2016, 12, 'True'),
    (3, 2017, 1, 'True'),
    (3, 2017, 2, 'False');
    
    
    SELECT t.Ano,
           Numero = MAX(t.Numero),
           Mes = MAX(t.Mes),
           t.Pago
    FROM @tabela AS t
    WHERE t.Pago = 'True'
    GROUP BY t.Ano,
             t.Pago
    ORDER BY Numero;

    "Se a resposta for útil ou ajudar ,não esqueça de marcar"


    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 




    Wesley Neves

    segunda-feira, 4 de dezembro de 2017 10:25
  • Bom dia,

    Nuno, experimente mais ou menos dessa forma:

    with CTE_RN as
    (
        select
            *,
            ROW_NUMBER() OVER(PARTITION BY Numero ORDER BY Ano DESC, Mes Desc) as RN
        from Tabela
        where
            Pago = 'True'
    )
    
    select * 
    from CTE_RN
    where RN = 1

    Espero que ajude


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

    segunda-feira, 4 de dezembro de 2017 11:32
  • Bom dia,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 11 de dezembro de 2017 12:32
    Moderador