Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rtonel

Pegar o ultimo dia de cada mes

Recommended Posts

Ae pessoal sou novo aqui e queria saber se vcs podem me ajudar com um problema.

 

Estou usando o sql server 2005, eu tenho que fazer o seguinte.

 

Pegar o ultimo dia de cada mes.

 

Dia valor1 valor 2

 

2010-04-08 00:00:00.000 1866368 3152247

2010-04-09 00:00:00.000 1866992 3155120

2010-04-30 00:00:00.000 1909544 3248420

2010-05-29 00:00:00.000 1951142 3344151

2010-05-30 00:00:00.000 1952069 3345536

 

na tabela acima eu tenho os meses de abril e maio, e o que eu preciso e selecionar so o dia 30 de maio e o dia 30 der abril

 

 

teria que ficar dessa forma.

 

Dia valor1 valor 2

2010-04-30 00:00:00.000 1909544 3248420

2010-05-30 00:00:00.000 1952069 3345536

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rtonel, bem vindo ao fórum....

 

Seja se esta funcao te da uma luz :P

 

 

DECLARE @DATA1 SMALLDATETIME, @ULTIMODIA SMALLDATETIME  
SET @DATA1 = '2012-02-15' -- aki você poe qq data que ele vai te retornar o ultimo dia do mes -- 

SET @ULTIMODIA = DATEADD(M,1,DATEADD(D,-DAY(@DATA1),@DATA1))  
SET @ULTIMODIA = CAST(CONVERT(CHAR(8),@ULTIMODIA,112) AS SMALLDATETIME)  


select @ULTIMODIA

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rtonel, bem vindo ao fórum....

 

Seja se esta funcao te da uma luz :P

 

 

DECLARE @DATA1 SMALLDATETIME, @ULTIMODIA SMALLDATETIME  
SET @DATA1 = '2012-02-15' -- aki você poe qq data que ele vai te retornar o ultimo dia do mes -- 

SET @ULTIMODIA = DATEADD(M,1,DATEADD(D,-DAY(@DATA1),@DATA1))  
SET @ULTIMODIA = CAST(CONVERT(CHAR(8),@ULTIMODIA,112) AS SMALLDATETIME)  


select @ULTIMODIA

 

Abçs

 

 

Obrigado pelas boas vindas e pela resposta rapida.

 

Entao eu acho que nao expliquei direito o que estou precisando.

 

Os dados que querendo mostrar sao desde janeiro desse ano, preciso mostrar todos os ultimos dias dos meses, sem precisar colocar uma data especifica.

a query que estou usando e essa:

 

SELECT      Data ,

			COUNT(1) as base_ativa,

			SUM( IRD_Digital + [IRD_Sky+] + IRD_HDTV) as equipamentos

 FROM

			cust_history cust (NOLOCK)

 WHERE

			Data BETWEEN '2010-01-01' AND '2010-12-31'

   AND      PackageStatusID IN ('B', 'A', 'P', 'S')

   AND      CheckToChurn = 'Y'

   AND      CustomerTypeID IN ('M', 'N')

   AND      CompanyID IN ('DG', 'DM', 'S', 'IT' )
group by data

a respostas que ele esta me dando e a seguinte

 

2010-01-31 00:00:00.000 1866368 3152247

2010-02-28 00:00:00.000 1866368 3152247

2010-03-31 00:00:00.000 1866368 3152247

2010-04-08 00:00:00.000 1866368 3152247

2010-04-09 00:00:00.000 1866992 3155120

2010-04-30 00:00:00.000 1909544 3248420

2010-05-29 00:00:00.000 1951142 3344151

2010-05-30 00:00:00.000 1952069 3345536

 

o que eu preciso e que so me aparece o ultimo dia de cada mes.

 

seria algo assim

 

 

2010-01-31 00:00:00.000 1866368 3152247

2010-02-28 00:00:00.000 1866368 3152247

2010-03-31 00:00:00.000 1866368 3152247

2010-04-30 00:00:00.000 1909544 3248420

2010-05-30 00:00:00.000 1952069 3345536

 

 

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rtonel,

 

não entendi muito bem, ajuda ai pra ajudarmos melhor você

 

1-você quer somar todo o mês (todos os dias) e na vizualização final colocar somente o dia 30 mais as somas em somente uma linha

ou

2-você quer somar somente o total na data do ultimo dia de cada mes e mostrar cada um em uma linha

 

?

 

acho que é a opção 1, se for, não vai dar pois o agrupamento (group by) é pelo campo data, o que podemos fazer é colocar uma sub-query e agrupar somente por mês e ano, depois se você quiser é só adicionar o último dia do mês tb.

 

segue exemplo simples:

create table cust_history (Data datetime, valor money) 

insert cust_history values ('2010-01-31', 1000)
insert cust_history values ('2010-01-29', 1400)
insert cust_history values ('2010-02-01', 1200)
insert cust_history values ('2010-02-28', 1300)
insert cust_history values ('2010-03-01', 1800)

select data, SUM(equipamentos) as equipamentos, COUNT(base_ativa) as base_ativa  from (
SELECT 
convert(char(4),year(Data)) + '/' + convert(char(2),MONTH(data)) as data,

COUNT(1) as base_ativa,

SUM( valor) as equipamentos

FROM

cust_history cust (NOLOCK)

WHERE

Data BETWEEN '2010-01-01' AND '2010-12-31'

group by data
) as x
group by data

drop table cust_history

retorna:

data    equipamentos          base_ativa
------- --------------------- -----------
2010/1  2400,00               2
2010/2  2500,00               2
2010/3  1800,00               1
(3 row(s) affected)

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rtonel,

 

não entendi muito bem, ajuda ai pra ajudarmos melhor você

 

1-você quer somar todo o mês (todos os dias) e na vizualização final colocar somente o dia 30 mais as somas em somente uma linha

ou

2-você quer somar somente o total na data do ultimo dia de cada mes e mostrar cada um em uma linha

 

?

 

acho que é a opção 1, se for, não vai dar pois o agrupamento (group by) é pelo campo data, o que podemos fazer é colocar uma sub-query e agrupar somente por mês e ano, depois se você quiser é só adicionar o último dia do mês tb.

 

segue exemplo simples:

create table cust_history (Data datetime, valor money) 

insert cust_history values ('2010-01-31', 1000)
insert cust_history values ('2010-01-29', 1400)
insert cust_history values ('2010-02-01', 1200)
insert cust_history values ('2010-02-28', 1300)
insert cust_history values ('2010-03-01', 1800)

select data, SUM(equipamentos) as equipamentos, COUNT(base_ativa) as base_ativa  from (
SELECT 
convert(char(4),year(Data)) + '/' + convert(char(2),MONTH(data)) as data,

COUNT(1) as base_ativa,

SUM( valor) as equipamentos

FROM

cust_history cust (NOLOCK)

WHERE

Data BETWEEN '2010-01-01' AND '2010-12-31'

group by data
) as x
group by data

drop table cust_history

retorna:

data    equipamentos          base_ativa
------- --------------------- -----------
2010/1  2400,00               2
2010/2  2500,00               2
2010/3  1800,00               1
(3 row(s) affected)

abs

 

 

vou tentar explicar melhor, eu to confundindo vcs.

 

 

isso e um relatorio que e feito mensalmente, sempre no final do mes.

 

nesse relatorio e para mostrar a data que foi feito o relatorio, o total da minha base ativa, e a soma dos aparelhos instalados.

 

o que esta acontecendo e, nos meses de janeiro, fevereiro e marco esta aparecendo normal o ultimo dia dos meses, abril esta aparecendo tres datas diferentes, e maio duas datas, o que eu preciso e que apareca somente o ultima dia do mes de abril, o ultimo dia do mes de maio e assim por diante.

 

esse relatorio eu to fazendo no microsoft visual studio, usando query para puxar os dados.

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

vou tentar explicar melhor, eu to confundindo vcs.

 

 

isso e um relatorio que e feito mensalmente, sempre no final do mes.

 

nesse relatorio e para mostrar a data que foi feito o relatorio, o total da minha base ativa, e a soma dos aparelhos instalados.

 

o que esta acontecendo e, nos meses de janeiro, fevereiro e marco esta aparecendo normal o ultimo dia dos meses, abril esta aparecendo tres datas diferentes, e maio duas datas, o que eu preciso e que apareca somente o ultima dia do mes de abril, o ultimo dia do mes de maio e assim por diante.

 

esse relatorio eu to fazendo no microsoft visual studio, usando query para puxar os dados.

 

obrigado

 

beleza, esta trazendo 3 datas diferentes pelo agrupamento de data, tenta adaptar o exemplo que passei anteriormente com sub-select que vai dar certo

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.