none
Ajuda para montar query. RRS feed

  • Pergunta

  • Estou tendo bastante dificuldade para montar a seguinte query:

    Preciso montar um select onde pegue todo vendedor que se encontra dentro de uma determinada data inicial e final, para que esse vendedor não possa ser inserido mais de uma vez no mesmo intervalo de data. Por exemplo, o vendedor marcos foi cadastrado no período de 01/09 a 10/09. caso esse mesmo vendedor tente ser cadastro novamente, num período de 03/09 a 07/09, por exemplo, não seja possível efetuar, pois esse período se encontra dentro do primeiro cadastrado. 

    O vendedor está em uma tabela, e a data inicial e data final, são colunas de outra tabela chamada ponto de venda.

    Como poderia montar esse select ? Qualquer dúvida ou maiores detalhes, so dizer que explico.

    Obrigado desde já !

    domingo, 8 de setembro de 2019 04:24

Respostas

Todas as Respostas

  • Deleted
    • Marcado como Resposta diego.lk segunda-feira, 9 de setembro de 2019 14:00
    domingo, 8 de setembro de 2019 11:07
  • E se houver sobreposição parcial de períodos, ainda assim o cadastro deve ser rejeitado ou se aceita a parte do período em que não há sobreposição? Por exemplo, se for solicitada a inclusão de novo período para marcos, de 8/9 a 15/9, esta deve ser rejeitada
     ou se aceita a parte de 11/9 a 15/9?
    

    Que não haja sobreposição de jeito nenhum. nesse caso foi cadastrado do dia 1 ao 10 para o vendedor x, qualquer período (somente desse vendedor específico, não todos) que pegue datas de 1 ao 10 devem ser barrados. Não podendo cadastrar para o vendedor x, por exemplo, do 5 ao 14, do 3 ao 20 e etc.

    Vou testar os códigos e te falo. 

    Muito obrigado pela ajuda, amigo.


    • Editado diego.lk segunda-feira, 9 de setembro de 2019 00:24
    segunda-feira, 9 de setembro de 2019 00:22
  • Preciso montar um select onde pegue todo vendedor que se encontra dentro de uma determinada data inicial e final, para que esse vendedor não possa ser inserido mais de uma vez no mesmo intervalo de data.

    E se houver sobreposição parcial de períodos, ainda assim o cadastro deve ser rejeitado ou se aceita a parte do período em que não há sobreposição? Por exemplo, se for solicitada a inclusão de novo período para marcos, de 8/9 a 15/9, esta deve ser rejeitada ou se aceita a parte de 11/9 a 15/9?

    ---

    Considerando-se que qualquer sobreposição é para ser rejeitada, seja parcial ou total, eis uma solução:

    -- código #1
    -- Autor:  José Diz/BH

    -- vendedor e período a tentar incluir
    declare @DI date, @DF date, @Vendedor varchar(20);
    set @DI= convert (date, '3/9/2019', 103);
    set @DF= convert (date, '7/9/2019', 103);
    set @Vendedor= 'marcos';

    -- lista períodos em que ocorre sobreposição (se houver)
    SELECT V.Nome_Vendedor, A.Data_Inicial, A.Data_Final
      from Alocacao_PDV as A
           inner join Vendedor as V on V.ID_Vendedor = A.ID_Vendedor
      where V.Nome_Vendedor = @Vendedor
            and Data_Inicial <= @DF
            and @DI <= Data_Final;

    Alocacao_PDV é a tabela que contém a alocação por período entre vendedores e PDV.

    Caso deseje somente detectar se há ou não sobreposição, eis uma variação do código #1:

    -- código #2
    -- Autor:  José Diz/BH

    -- vendedor e período a tentar incluir declare @DI date, @DF date, @Vendedor varchar(20); set @DI= convert (date, '3/9/2019', 103); set @DF= convert (date, '7/9/2019', 103); set @Vendedor= 'marcos'; -- pesquisa se ocorre sobreposição IF exists (SELECT 0 from Alocacao_PDV as A inner join Vendedor as V on V.ID_Vendedor = A.ID_Vendedor where V.Nome_Vendedor = @Vendedor and Data_Inicial <= @DF and @DI <= Data_Final) PRINT 'sobreposição detectada';
      

    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Muito obrigado meu amigo. Funcionou perfeitamente. Valeu mesmo !
    segunda-feira, 9 de setembro de 2019 14:00
  • Deleted
    segunda-feira, 9 de setembro de 2019 17:49