Ir para conteúdo
Fórum Script Brasil

Shakazahn

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que Shakazahn postou

  1. 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?
×
×
  • Criar Novo...