Olá, Eu estou montando um banco de dados para cadastro de quadrinhos, onde você pode cadastrar os quadrinhos que quiser e sua periodicidade, e estou tentando montar uma query que monte uma "planilha mensal" dos quadrinhos que serão lançados durante o mês atual. Por enquanto tenho uma tabelaQuadrinhos (QuadrinhoID, PeriodicidadeID, Nome, Data), tabelaPeriodicidade (PeriodicidadeID, Nome, DiasDoPeriodo), tabelaLancamentos (LancamentoID, QuadrinhoID, NumeroQuadrinho, DataLancado, DataComprado). A query tem que mostrar todos os quadrinhos que serão lançados no mês atual (ou outro escolhido). O que eu fiz é: DECLARE @MesAtual = 2 --Fevereiro
SELECT
q.Quadrinho,
qp.Periodicidade,
qp.DiasDoPeriodo,
DATEADD("d", qp.DiasDoPeriodo, MAX(l.DataLancado)) AS ProximoLancamentoData, --Esta coluna é só pra saber a prox. data
CASE
WHEN MONTH(DATEADD("d", qp.DiasDoPeriodo, MAX(l.DataLancado))) = @MesAtual
THEN DATEADD("d", qp.DiasDoPeriodo, MAX(l.DataLancado))
END
AS LancamentoMensal --Esta coluna só vai aparecer se o prox. lancamento for no mês Atual
FROM tabelaQuadrinhos q
INNER JOIN tabelaPeriodicidade qp ON q.PeriodicidadeID = qp.PeriodicidadeID
LEFT JOIN tabelaLancamentos l ON q.QuadrinhoID = l.QuadrinhoID
GROUP BY q.Quadrinho, qp.Periodicidade, qp.DiasDoPeriodo
Até aqui está funcionando bem, mas eu estou com um problema que é no caso de registros com uma periodicidade menor do que 1 mês (quadrinhos semanais e quinzenais por exemplo).
Eu estou tentando descobrir um jeito que eu posso incluir um outro registro caso a última data + periodo ainda seja no mês atual.
Tentei usar uma tabela temporária pra guardar os registros (#planilhaMensal) e:
INSERT INTO #planilhaMensal (Quadrinho, Periodicidade, DiasDoPeriodo, ProximoLancamentoData, LancamentoMensal)
SELECT
Quadrinho,
Periodicidade,
DiasDoPeriodo,
DATEADD("d", Dias, MAX(ProximoLancamentoData)) AS ProximoLancamentoData,
CASE
WHEN MONTH(DATEADD("d", Dias, MAX(ProximoLancamentoData))) = @MesAtual
THEN DATEADD("d", Dias, MAX(ProximoLancamentoData))
END
AS LancamentoMensal
FROM #planilhaMensal
GROUP BY Quadrinho, Periodicidade, DiasDoPeriodo, ProximoLancamentoData Isto aqui também funcionou, porém só 1 vez. Eu consigo os registros que terão um lancamento ainda este mês e incluo na própria tabela, mas se eu rodar isto uma segunda vez, eu terei os mesmos registros duplicados. Eu acho que o certo seria usar um WHILE, mas não consigo um SELECT que devolva somente 1 registro (se vier vários o WHILE não aceita) para resolver. Alguém tem uma sugestão de como posso resolver isso?