Buscar apenas últimos dias dos meses SQL

10/10/2017

0

Bom dia, estou montando uma consulta no SQL que traz o acumulado diário de um fluxo de caixa.
Porém o que interessa pra mim é apenas o valor acumulado do último dia de cada mês.
Ex: eu preciso que me traga apenas os valores dos dias 31/01, 28/02, 31/03, 30/04, 31/05 e assim por diante.

Desde já agradeço a compreensão
Gustavo

Gustavo

Responder

Posts

10/10/2017

Venancio Alves

Olá Gustavo, por favor poste uma tabela como exemplo para facilitar a resolução.
Responder

10/10/2017

Luiz Santos

Boa tarde Gustavo.
Não entendi muito bem o que você precisa, mas se estiver usando a versão 2012 ou superior do SQL Server, você tem a função EOMONTH:

SELECT EOMONTH(GETDATE())


Já versões anteriores, temos esse método, um pouco comprido, mas que também funciona:

SELECT DATEADD(DAY, -1, CONVERT(VARCHAR(8), YEAR(DATEADD(MONTH, 1, GETDATE())) * 10000 + MONTH(DATEADD(MONTH, 1, GETDATE())) * 100 + 1, 112))


Espero ter conseguido te ajudar.

Grande abraço
Responder

10/10/2017

Luiz Santos

Gustavo.

Segue uma forma um pouco menos bisonha que a minha.

SELECT DATEADD(DAY,-(DAY(DATEADD(MONTH,1,GETDATE()))), DATEADD(MONTH,1,GETDATE())) 
Responder

10/10/2017

Gustavo

Boa tarde a todos, obrigado pelas dicas. Segue exemplo do que eu fiz para conseguir o que eu queria, mas não sei se é o jeito correto, eu fiz vários Unions, onde cada um busca as ultimas datas de movimentação em cada conta bancária dentro de um mês. Se eu quisesse buscar por exemplo, a última data de movimentação dos últimos 24 meses, eu teria que fazer 24 Unions. Deu certo, mas eu achei estranho a solução, gostaria de saber se tecnicamente tem uma solução melhor. Segue sql conforme solicitado:

SELECT Empresa_dtc, Conta_dtc, MAX (UltDataSaldo_dtc) AS UltimoSaldodoMes
FROM(
SELECT
Empresa_sdcc AS Empresa_dtc, Banco_sdcc AS Banco_dtc, Conta_sdcc AS Conta_dtc, MAX(Data_sdcc) as UltDataSaldo_dtc
FROM SaldoConta
LEFT JOIN Bancos ON
Banco_sdcc = Numero_banco
LEFT JOIN Ccorrente ON
Empresa_sdcc = Empresa_banco
AND Banco_sdcc = Ccorrente.Numero_banco
AND Conta_sdcc = Conta_banco
WHERE DATEDIFF(Month, Data_sdcc, GETDATE()) = 1 AND
Empresa_sdcc IN('44')AND AtInat_banco = 0
GROUP BY Empresa_sdcc, Banco_sdcc, Conta_sdcc, Tipo_banco
) AS ULTIMOSALDO
GROUP BY Conta_dtc, Empresa_dtc


UNION

SELECT Empresa_dtc, Conta_dtc, MAX (UltDataSaldo_dtc) AS UltimoSaldodoMes
FROM(
SELECT
Empresa_sdcc AS Empresa_dtc, Banco_sdcc AS Banco_dtc, Conta_sdcc AS Conta_dtc, MAX(Data_sdcc) as UltDataSaldo_dtc
FROM SaldoConta
LEFT JOIN Bancos ON
Banco_sdcc = Numero_banco
LEFT JOIN Ccorrente ON
Empresa_sdcc = Empresa_banco
AND Banco_sdcc = Ccorrente.Numero_banco
AND Conta_sdcc = Conta_banco
WHERE DATEDIFF(Month, Data_sdcc, GETDATE()) = 2 AND
Empresa_sdcc IN('44')AND AtInat_banco = 0
GROUP BY Empresa_sdcc, Banco_sdcc, Conta_sdcc, Tipo_banco
) AS ULTIMOSALDO
GROUP BY Conta_dtc, Empresa_dtc

UNION

SELECT Empresa_dtc, Conta_dtc, MAX (UltDataSaldo_dtc) AS UltimoSaldodoMes

FROM(

SELECT
Empresa_sdcc AS Empresa_dtc, Banco_sdcc AS Banco_dtc, Conta_sdcc AS Conta_dtc, MAX(Data_sdcc) as UltDataSaldo_dtc
FROM SaldoConta
LEFT JOIN Bancos ON
Banco_sdcc = Numero_banco
LEFT JOIN Ccorrente ON
Empresa_sdcc = Empresa_banco
AND Banco_sdcc = Ccorrente.Numero_banco
AND Conta_sdcc = Conta_banco
WHERE DATEDIFF(Month, Data_sdcc, GETDATE()) = 3 AND
Empresa_sdcc IN('44')AND AtInat_banco = 0
GROUP BY Empresa_sdcc, Banco_sdcc, Conta_sdcc, Tipo_banco
) AS ULTIMOSALDO
GROUP BY Conta_dtc, Empresa_dtc

Dados retornados:

Empresa_dtc Conta_dtc UltimoSaldodoMes
44 0006095-0 2017-07-31 00:00:00.000
44 0006095-0 2017-08-18 00:00:00.000
44 0006095-0 2017-09-20 00:00:00.000
44 0013065741-3 2017-07-31 00:00:00.000
44 0013065741-3 2017-08-04 00:00:00.000
44 0013065741-3 2017-09-11 00:00:00.000
44 013065741-3 2017-07-18 00:00:00.000
44 13060544-7 2017-07-31 00:00:00.000
44 13060544-7 2017-08-31 00:00:00.000
44 13060544-7 2017-09-29 00:00:00.000
44 13065741-3 2017-07-31 00:00:00.000
44 13065741-3 2017-08-31 00:00:00.000
44 13065741-3 2017-09-29 00:00:00.000
44 6095-0 2017-07-31 00:00:00.000
44 6095-0 2017-08-31 00:00:00.000
44 6095-0 2017-09-29 00:00:00.000
44 6919-1 2017-09-29 00:00:00.000
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar