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?
Pergunta
Shakazahn
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 é:
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: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?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.