Inquiridor
Retornar max de um mês e ano

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
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 -
-
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 -
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 DeveloperSe 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. -
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 DeveloperSe 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. -
-
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
-
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 DeveloperSe 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
-