SQL REAJUSTE ANUAL

IRENKO 15/12/2014 20:38:07
#443225
Mais uma Sql complicada para mim.

Tenho uma data inicial, exemplo:

01/01/2013

preciso aplicar uma consulta varrendo a tabela e o campo Data para mostrar qual sera a data do reajuste de um determinado valor anualmente. Conforme data acima, o proximo reajuste sera em 01/01/2014. Como ficaria esse calculo dentro de uma consulta Sql? E após esse cálculo, mostrar a data que sera aplicada, ou seja, 01/02/2014?
TUNUSAT 15/12/2014 22:17:59
#443226
Resposta escolhida
IRENKO,

Pelo que eu entendi, você precisa pegar a data e somar 1 ano a ela ...
... por exemplo, dispare a linha abaixo dentro do Microsoft SQL Manager Studio:

select dateadd(YEAR,1,[ô]2013-01-01[ô])


Retorno: [Ô]2014-01-01 00:00:00.000[Ô]

Depois é pegar esta data e somar 1 mês ou 1 dia? Não entendi ...

select dateadd(MONTH,1,[ô]2014-01-01[ô])


Retorno: [Ô]2014-02-01 00:00:00.000[Ô]

select dateadd(DAY,1,[ô]2014-01-01[ô])


Retorno: [Ô]2014-01-02 00:00:00.000[Ô]

é isso que você deseja?

Veja mais em:
http://msdn.microsoft.com/pt-br/library/ms186819.aspx


[][ô]s,
Tunusat.
MARCELO.TREZE 15/12/2014 22:18:22
#443227
só não entendi uma coisa,essa data inicial esta gravada no banco, ou você vai colocar a data programaticamente?

IRENKO 15/12/2014 22:31:16
#443228
A data ja esta gravada, minha dificuldade é colocar essa pesquisa em uma sql.
IRENKO 15/12/2014 22:37:01
#443229
Na minha tabela tenho o campo DataInicial, a partir dela tenho que montar um select mostrando a data do reajuste, para esse caso 12 meses e depois somar mais 1 mes onde sera aplicado o reajuste.

exemplo :

Data Inicial : 01/01/2013
Reajuste em: 01/01/2014
Aplicação em : 01/02/2014
SINCLAIR 15/12/2014 23:10:00
#443230
Colega, o ideal seria criar uma View e não um select. Mas se prefere Select, pode ser também.

POSTGRES:
Select 
DataInicial as Data_Inicio_do_Reajuste,
(DataInicial + cast([ô]1 years[ô] as interval))+ cast([ô]1 months[ô] as interval) as Data_Proximo_Reajuste
From
SuaTabelaAqui


MYSQL:
Select 
DataInicial as Data_Inicio_do_Reajuste,
DateAdd(MONTH,1,DateAdd(YEAR,1,DataInicial)) as Data_Proximo_Reajuste
From
SuaTabelaAqui


No caso do MySQL acho que serve para o SQLServer também.

Tudo de bom.
IRENKO 16/12/2014 08:29:28
#443233
Putz! Esqueci de citar que o banco é access! Desculpe-me.
TUNUSAT 16/12/2014 10:03:05
#443237
IRENKO,

No Access é assim:
SELECT tbBancoDados.CampoData, DateAdd([Ô]yyyy[Ô],1,[CampoData]) AS DataAno, DateAdd([Ô]m[Ô],1,[CampoData]) AS SomaMes, DateAdd([Ô]d[Ô],1,[CampoData]) AS SomaDia
FROM tbBancoDados;


[][ô]s,
Tunusat.

IRENKO 16/12/2014 20:23:01
#443251
Tunusat, fico grato pela ajuda! Estava eu analisando o problema e achei um bug. Na realidade essa consulta deveria ser feita baseando-se no Dia e Mês da data inicial comparando com os mesmos do Ano atual, ai eu saberia que no ano de 2014 eu teria (n) reajustes, deu pra entender? O select conforme sua sugestão ficou assim:

SELECT Valores.Inicio, DateAdd([Ô]yyyy[Ô],1,[Valores.Inicio]) AS DataAno, DateAdd([Ô]m[Ô],1,[Valores.Inicio]) AS SomaMes, DateAdd([Ô]d[Ô],1,[Valores.Inicio]) AS SomaDia
FROM Valores;

ficou perfeito para o calculo exato exemplo esse é o resultado da sua Sql:

Inicio DataAno SomaMes SomaDia
11/02/2014 11/02/2015 11/03/2014 12/02/2014


Ops! Agora q vi que tem um erro no SomaMes e SomaDia, teria que ser 11/03/2015 e 12/02/2015.

O q eu gostaria seria por exemplo uma data 13/02/1989

no dia 13 do mes 02 do ano de 2014 vai ter o reajuste. Não sei se fui claro. Teria como?
TUNUSAT 16/12/2014 20:48:05
#443253
IRENKO,

Maravilha!
Precisa fazer a soma do mês em cima do resultado da soma do ano ... acredito que você só precisa pegar o alias [Ô]DataAno[Ô] para fazer isto. Idem para soma dia.
Deve ser isto:
- DateAdd([Ô]m[Ô],1,[DataAno]) AS SomaMes
- DateAdd([Ô]d[Ô],1,[DataAno]) AS SomaDia

Para 1989 a mesma coisa, mas com número negativos. Por exemplo:
- DateAdd([Ô]yyyy[Ô],-25,[Valores.Inicio])

[][ô]s,
Tunusat.

Tópico encerrado , respostas não são mais permitidas