Ir para conteúdo
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×
Quer acesso a todas as Áreas do Fórum, até aquelas só para membros VIPs? Também quer poder baixar qualquer ARQUIVO? ×

Como fazer para recuperar registros de um mês anterior


Angelo Louzada

Posts Recomendados


  • Tópicos Que Criei:  10
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  21
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  213
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  39
  • Dispositivo:  Windows

Moçada, gostaria de pedir uma ajuda de vocês para a seguinte situação:

Eu preciso recuperar determinados registros cujo os dados são filtrados pelo campo data de saida para realizar um cálculo de saldo anterior, ou seja,

o usuário irá informar uma data inicial e final e gostaria que na cláusula where o SQL buscasse os registros do mes anterior ao informado.

Exemplo:

select tmov.datasaida

,tmov.numeromov

from tmov

where tmov.datasaida between '01/02/2010' and '28/02/2010'

order by tmov.datasaida

Essa sentença me retorna os registros de fevereiro de 2010 aí pensei em algo do tipo

select tmov.datasaida

,tmov.numeromov

from tmov

where tmov.datasaida between convert(datetime, convert(datetime, '01/02/2010')-30) and convert(datetime, convert(datetime, '28/02/2010')-30)

order by tmov.datasaida

porém dessa forma eu obtenho apenas os registros cuja data comece do dia 04/01/2010 até a data 29/01/2010.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Pô Angelo, esse "Moçada" pegou pesado heim, rs rs rs.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  39
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  205
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Moçada, gostaria de pedir uma ajuda de vocês para a seguinte situação:

Eu preciso recuperar determinados registros cujo os dados são filtrados pelo campo data de saida para realizar um cálculo de saldo anterior, ou seja,

o usuário irá informar uma data inicial e final e gostaria que na cláusula where o SQL buscasse os registros do mes anterior ao informado.

Exemplo:

select tmov.datasaida

,tmov.numeromov

from tmov

where tmov.datasaida between '01/02/2010' and '28/02/2010'

order by tmov.datasaida

Essa sentença me retorna os registros de fevereiro de 2010 aí pensei em algo do tipo

select tmov.datasaida

,tmov.numeromov

from tmov

where tmov.datasaida between convert(datetime, convert(datetime, '01/02/2010')-30) and convert(datetime, convert(datetime, '28/02/2010')-30)

order by tmov.datasaida

porém dessa forma eu obtenho apenas os registros cuja data comece do dia 04/01/2010 até a data 29/01/2010.

Angelo,

Tenta assim cara:

declare

@data Datetime

set @data = '2010-02-01'

print @data

select tmov.datasaida

,tmov.numeromov

from tmov

where month(datasaida) = (month(@data)-1)

and year(datasaida)= year(@data)

order by tmov.datasaida

Essa variável @data seria o parametro que você está passando.

OBS: Não funciona com o mes de janeiro (pois 1-1 = 0), tenta contornar isso. ^^

:Valeu:

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  10
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  21
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  213
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  39
  • Dispositivo:  Windows

Angelo,

Tenta assim cara:

declare

@data Datetime

set @data = '2010-02-01'

print @data

select tmov.datasaida

,tmov.numeromov

from tmov

where month(datasaida) = (month(@data)-1)

and year(datasaida)= year(@data)

order by tmov.datasaida

Essa variável @data seria o parametro que você está passando.

OBS: Não funciona com o mes de janeiro (pois 1-1 = 0), tenta contornar isso. ^^

:Valeu:

Se alguém passar pela mesma situação que eu, conseguir resolver da seguinte forma:

Primeiro criei uma função

create function fn_CalculoMesAnt

( @datainicial datetime,

@datafinal datetime )

returns datetime

as

begin

declare @dtIni datetime

declare @dtFim datetime

set @dtIni = @datainicial

set @dtFim = @datafinal

declare @dtFimProxMes varchar(10)

set @dtFimProxMes = cast(year(convert(datetime, @dtFim,103))as char(4))+right('00'+cast(month(convert(datetime, @dtFim,103))as varchar(2)),2)+'01'

return @dtFimProxMes

end

depois fiz a chamada da função da seguinte forma:

select tmov.datasaida

,tmov.numeromov

from tmov

where tmov.datasaida between dateadd(mm,-1,convert(datetime, :Data_Inicial,103)) and dateadd(dd,-1, dbo.fn_CalculoMesAnt(:Data_Inicial,:Data_Final))

order by tmov.datasaida

E funcionou perfeitamente.

Até a próxima pessoal...

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.