none
Retornar max de um mês e ano RRS feed

  • Pergunta

  • Bom dia,

    Tenho uma tabela com uma coluna do tipo smalldatetime, e em uma consulta preciso descobrir qual a maior data existente nesta coluna, só que preciso desprezar o dia, ou seja, preciso fazer este MAX apenas do mês e do ano, ou seja, o retorno deve ser por exemplo: 10/2010.
    Alguém sabe como fazer isso?

    Obrigado.
    Ronald

    terça-feira, 28 de junho de 2011 14:21

Todas as Respostas

  • Ronald,

     

    veja este exemplo:

     

    --CRIAÇÃO DE TABELA

    create table teste(data smalldatetime)

    --CARGA DE DADOS

    insert into teste values

    (getdate()),

    (dateadd(month,+1,getdate())),

    (dateadd(month,+2,getdate())),

    (dateadd(month,+3,getdate())),

    (dateadd(month,+4,getdate()))

    --SELECT

    SELECT 

    MAX(

    CASE 

    WHEN LEN(CAST(MONTH(DATA) AS VARCHAR)) = 1 THEN '0'+CAST(MONTH(DATA) AS VARCHAR)

    ELSE CAST(MONTH(DATA) AS VARCHAR) END

    +'/'+

    CAST(YEAR(DATA) AS VARCHAR))

    FROM TESTE


    Oracle OCA11g, MCTS SQL Server 2008, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com http://www.tripletech.com.br/blog/ Twitter: @FabrizzioCaputo
    terça-feira, 28 de junho de 2011 14:33
    Moderador
  • Obrigado Fabrizzio,

     

    Mas não é o que eu preciso, pois retorna sempre a mesma data: 12/2010, mesmo colocando um WHERE.

    Obrigado de novo.

    terça-feira, 28 de junho de 2011 15:11
  • Ronald,

     

    O exemplo acima esta retornando o max desconsiderando os dias, o que exatamente voce quer?

     

    é possivel sim adicionar clausulas wheres na query, e caso o seu where deve ser considerado apenas dia e ano, então voce não teria o max, mas basta retirar o max da query que passei e colcoar no where.


    Oracle OCA11g, MCTS SQL Server 2008, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com http://www.tripletech.com.br/blog/ Twitter: @FabrizzioCaputo
    terça-feira, 28 de junho de 2011 15:21
    Moderador
  • Ronald, ainda com a pergunta do Fabrizzio, o que exatamente você quer? Veja que o exemplo abaixo verifica a maior data de todas, mostrando no formato mm/aaaa. O que você precisa além disso?

    Declare @Tabela Table (Data SmallDateTime)

    Insert Into @Tabela Values (GETDATE()), (GETDATE() + 1), (GETDATE() + 2), (GETDATE() + 300)

    Select SubString(Convert(VarChar(10), MAX(Data), 103), 4, 7) From @Tabela


    Roberson Ferreira - Database Developer

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 28 de junho de 2011 15:35
  • Se você preferir, post um exemplo de como suas informações estão cadastradas e como você gostaria que elas retornassem, isto é, o que você pretende apresentar.
    Roberson Ferreira - Database Developer

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 28 de junho de 2011 16:11
  • Caras, obrigado.

    O que eu preciso é saber a maior data levando em conscideração somente o mês e o ano, por exemplo, saber que em 2008 o maior mês que teve chamados foi setembro....

    terça-feira, 28 de junho de 2011 17:40
  • Ronald,

     

    Agora sim ficou claro, veja:

    --DECLARAÇÂO DA TABELA

    declare @t1 table(data datetime)

    --CARGA DE DADOS

    insert into @t1 values

    ('2001-01-01'),

    ('2001-02-01'),

    ('2002-02-01'),

    ('2003-02-01'),

    ('2003-05-01'),

    ('2003-12-01'),

    ('2004-01-01'),

    ('2004-03-01'),

    ('2005-10-01'),

    ('2005-11-01')

    --SELECT

    select year(data) as ano, max(month(data)) as maior_mes

    from @t1

    group by year(data)


    Oracle OCA11g, MCTS SQL Server 2008, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com http://www.tripletech.com.br/blog/ Twitter: @FabrizzioCaputo
    • Sugerido como Resposta Luiz Estevam quarta-feira, 13 de julho de 2011 02:34
    terça-feira, 28 de junho de 2011 17:52
    Moderador
  • Ronald, acredito que o exemplo do Fabrizzio seja o que precisa. E em cima do script que eu tinha lhe passado antes, também bastaria acrescentar o agrupamento por ano:

    Declare @Tabela Table (Data SmallDateTime)

    Insert Into @Tabela Values (GETDATE()), (GETDATE() + 1), (GETDATE() + 60), (GETDATE() + 300)

    Select SubString(Convert(VarChar(10), MAX(Data), 103), 4, 7) From @Tabela Group by YEAR(Data)

    Agora, será que isso realmente lhe atende? É o que precisa?


    Roberson Ferreira - Database Developer

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Luiz Estevam quarta-feira, 13 de julho de 2011 02:34
    terça-feira, 28 de junho de 2011 19:50
  • Seria isso ?

     

    Select Month(Max(Data)), Year(Max(Data)) From tabela
    

    Victor Perez

     

    segunda-feira, 4 de julho de 2011 21:33