4 Replies Latest reply: Mar 22, 2013 4:59 PM by Weslley Castilho RSS

    Junção e Comparação entre datas em duas tabelas distintas

      Pessoal boa tarde,

       

      Muito tenho pesquisa sobre intervalo entre duas datas e muito tenho encontrado pessoal que tem essa neecessidade e muitas, muitas mesmo, são as dificuldades para cada situação/pessoa.

       

      No meu caso não é diferente.

       

      Por isso peço ajuda a vocês, pois " n " cabeças pensam melhor que uma.

       

       

      Em outros post's, com ajuda dos Senhores (as) contrui um calendário Brasileiro tendo os feriados fixos e variados ( ou seja todos os calendários).

       

      Minhas variáveis no código abaixo traz os feriados desde 2009 ao ano corrente + 01 ( neste caso 2004).

       

      Abaixo o script e o resultado do mesmo:

      /*****************************************************Feriados*************************************************************************************

       

          // Feriados Fixos

       

             // {Years}

            

      LET Var1 = 2009;

      LET Var2 = year(today())+1;// $(n)+1;

      LET VarTotal = 1;

       

      Sub Cal (Var1,Var2,VarTotal)

             

               for n = ($(Var1)) to ($(Var2)) Step 1

                     

                  Calendar:

                         

                  LOAD * INLINE [

                  Holiday, Desc

                  01/01/$(n), Confraternização Universal

                  01/25/$(n), Aniversário São Paulo

                  04/21/$(n), Tiradentes

                  05/01/$(n), Dia do Trabalho

                  06/15/$(n), Aniversário Itajaí

                  07/09/$(n), Deflagração da Revolução Constitucionalista de 1932

                  09/07/$(n), Independência do Brasil

                  10/12/$(n), Nossa Sra. Aparecida - Padroeira do Brasil

                  11/02/$(n), Finados

                  11/15/$(n), Proclamação da República

                  12/24/$(n), Véspera de Natal

                  12/25/$(n), Natal

                  12/31/$(n), Véspera de Ano Novo];

                 

           Pascoa:

         

      Load

           Date(Holiday,'M/DD/YYYY') As Holiday,

           //Para anos entre 1901 e 2099: X = 24 e Y = 5 para anos de 10

          if(((if((((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

           >=10 // Maior que 9

              ),

              (

           '4/'& // Abril

              (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

            -9 // Menos 9

              ) &'/'&($(n)) // YYYY

              ), ('3/'& // Março

                (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

            +22 // Mais 22

              )&'/'&($(n)) // YYYY

              )))

              ='4/26/2076'), '4/19/2076',

          if(((if((((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

           >=10 // Maior que 9

              ),

              (

           '4/'& // Abril

              (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

            -9 // Menos 9

              ) &'/'&($(n)) // YYYY

              ), ('3/'& // Março

                (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

            +22 // Mais 22

              )&'/'&($(n)) // YYYY

              )))    ='4/25/2049'), '4/18/2049',

          (if((((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

           >=10 // Maior que 9

              ),

              (

           '4/'& // Abril

              (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

            -9 // Menos 9

              ) &'/'&($(n)) // YYYY

              ), ('3/'& // Março

                (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

           + // +

           (Mod((2*(Mod($(n),4))+4*(Mod($(n),7))+6*(Mod(((19)*(Mod($(n),19)))+(24),30))+5),7)))// e

            +22 // Mais 22

              )&'/'&($(n)) // YYYY

              ))))) As Pascoa,  // Se (d + e) > 9 então DIA = (d + e - 9) e MES = Abril senão DIA = (d + e + 22) e MES = Março

          Desc

      Resident Calendar;

      Drop Table Calendar;

       

          Calendario_Temporario:

       

      Load

           Date(if( Year(today())>1, Pascoa - 48, ''),'M/DD/YYYY') As Vespera_de_Carnaval,

           Date(if( Year(today())>1, Pascoa - 47, ''),'M/DD/YYYY') As Carnaval,

           Date(if( Year(today())>1, Pascoa - 46, ''),'M/DD/YYYY') As Cinzas,

           Date(if( Year(today())>1, Pascoa - 2, ''),'M/DD/YYYY') As Sexta_Feira_Santa,

           Date(if( Year(today())>1, Pascoa + 60, ''),'M/DD/YYYY') As Corpus_Christi,

           Date(Pascoa, 'M/DD/YYYY') As Pascoa,

           Holiday,

           Desc

      Resident Pascoa;

       

      Drop Table Pascoa;

       

          next

         

              Feriados_Fixo:

       

      load

           Holiday,

           Desc

      Resident Calendario_Temporario;

       

          Feriado_Variavel:

         

      Load

          Vespera_de_Carnaval,

          Carnaval,

          Cinzas,

          Sexta_Feira_Santa,

          Corpus_Christi,

          Pascoa

      Resident Calendario_Temporario;

       

      Drop Table Calendario_Temporario;

       

              LET qtde_fields = NoOfFields('Feriado_Variavel');

       

                      FOR i=1 TO  qtde_fields

       

              LET campo = FieldName($(i), 'Feriado_Variavel');

       

            Feriado:

       

      Load

          $(campo) As Holiday,

          if(upper('$(campo)')='VESPERA_DE_CARNAVAL', 'Véspera de Carnaval',

          if(upper('$(campo)')='SEXTA_FEIRA_SANTA', 'Sexta Feira Santa',

          if(upper('$(campo)')='CORPUS_CHRISTI', 'Corpus Christi',

          if(upper('$(campo)')='CINZAS', 'Quarta Feira de Cinzas', '$(campo)')))) As Desc    

      Resident Feriado_Variavel;

       

       

                  Next

      // a tabela anterior contem a mesma qtde de campos, o concatenate é realizado automaticamente.

       

          Feriado:

       

      Load

          Date(Holiday, 'MM/D/YYYY') As Holiday,

          Weekday(Holiday) As DiaSemana,

          Desc    

      Resident Feriados_Fixo;

       

      Drop Table Feriados_Fixo;

       

      Drop Table Feriado_Variavel;

       

      end sub

       

      Call Cal (Var1,Var2,VarTotal);

       

      Abaixo o resultado do script acima:

       

      HolidayDescDiaSemana
      1/1/2009Confraternização UniversalThu
      1/25/2009Aniversário São PauloSun
      2/23/2009Véspera de CarnavalMon
      2/24/2009CarnavalTue
      2/25/2009Quarta Feira de CinzasWed
      4/10/2009Sexta Feira SantaFri
      4/12/2009PascoaSun
      4/21/2009TiradentesTue
      5/1/2009Dia do TrabalhoFri
      6/11/2009Corpus ChristiThu
      6/15/2009Aniversário ItajaíMon
      7/9/2009Deflagração da Revolução Constitucionalista de 1932Thu
      9/7/2009Independência do BrasilMon
      10/12/2009Nossa Sra. Aparecida - Padroeira do BrasilMon
      11/2/2009FinadosMon
      11/15/2009Proclamação da RepúblicaSun
      12/24/2009Véspera de NatalThu
      12/25/2009NatalFri
      12/31/2009Véspera de Ano NovoThu
      1/1/2010Confraternização UniversalFri
      1/25/2010Aniversário São PauloMon
      2/15/2010Véspera de CarnavalMon
      2/16/2010CarnavalTue
      2/17/2010Quarta Feira de CinzasWed
      4/2/2010Sexta Feira SantaFri
      4/4/2010PascoaSun
      4/21/2010TiradentesWed
      5/1/2010Dia do TrabalhoSat
      6/3/2010Corpus ChristiThu
      6/15/2010Aniversário ItajaíTue
      7/9/2010Deflagração da Revolução Constitucionalista de 1932Fri
      9/7/2010Independência do BrasilTue
      10/12/2010Nossa Sra. Aparecida - Padroeira do BrasilTue
      11/2/2010FinadosTue
      11/15/2010Proclamação da RepúblicaMon
      12/24/2010Véspera de NatalFri
      12/25/2010NatalSat
      12/31/2010Véspera de Ano NovoFri
      1/1/2011Confraternização UniversalSat
      1/25/2011Aniversário São PauloTue
      3/7/2011Véspera de CarnavalMon
      3/8/2011CarnavalTue
      3/9/2011Quarta Feira de CinzasWed
      4/21/2011TiradentesThu
      4/22/2011Sexta Feira SantaFri
      4/24/2011PascoaSun
      5/1/2011Dia do TrabalhoSun
      6/15/2011Aniversário ItajaíWed
      6/23/2011Corpus ChristiThu
      7/9/2011Deflagração da Revolução Constitucionalista de 1932Sat
      9/7/2011Independência do BrasilWed
      10/12/2011Nossa Sra. Aparecida - Padroeira do BrasilWed
      11/2/2011FinadosWed
      11/15/2011Proclamação da RepúblicaTue
      12/24/2011Véspera de NatalSat
      12/25/2011NatalSun
      12/31/2011Véspera de Ano NovoSat
      1/1/2012Confraternização UniversalSun
      1/25/2012Aniversário São PauloWed
      2/20/2012Véspera de CarnavalMon
      2/21/2012CarnavalTue
      2/22/2012Quarta Feira de CinzasWed
      4/6/2012Sexta Feira SantaFri
      4/8/2012PascoaSun
      4/21/2012TiradentesSat
      5/1/2012Dia do TrabalhoTue
      6/7/2012Corpus ChristiThu
      6/15/2012Aniversário ItajaíFri
      7/9/2012Deflagração da Revolução Constitucionalista de 1932Mon
      9/7/2012Independência do BrasilFri
      10/12/2012Nossa Sra. Aparecida - Padroeira do BrasilFri
      11/2/2012FinadosFri
      11/15/2012Proclamação da RepúblicaThu
      12/24/2012Véspera de NatalMon
      12/25/2012NatalTue
      12/31/2012Véspera de Ano NovoMon
      1/1/2013Confraternização UniversalTue
      1/25/2013Aniversário São PauloFri
      2/11/2013Véspera de CarnavalMon
      2/12/2013CarnavalTue
      2/13/2013Quarta Feira de CinzasWed
      3/29/2013Sexta Feira SantaFri
      3/31/2013PascoaSun
      4/21/2013TiradentesSun
      5/1/2013Dia do TrabalhoWed
      5/30/2013Corpus ChristiThu
      6/15/2013Aniversário ItajaíSat
      7/9/2013Deflagração da Revolução Constitucionalista de 1932Tue
      9/7/2013Independência do BrasilSat
      10/12/2013Nossa Sra. Aparecida - Padroeira do BrasilSat
      11/2/2013FinadosSat
      11/15/2013Proclamação da RepúblicaFri
      12/24/2013Véspera de NatalTue
      12/25/2013NatalWed
      12/31/2013Véspera de Ano NovoTue
      1/1/2014Confraternização UniversalWed
      1/25/2014Aniversário São PauloSat
      3/3/2014Véspera de CarnavalMon
      3/4/2014CarnavalTue
      3/5/2014Quarta Feira de CinzasWed
      4/18/2014Sexta Feira SantaFri
      4/20/2014PascoaSun
      4/21/2014TiradentesMon
      5/1/2014Dia do TrabalhoThu
      6/15/2014Aniversário ItajaíSun
      6/19/2014Corpus ChristiThu
      7/9/2014Deflagração da Revolução Constitucionalista de 1932Wed
      9/7/2014Independência do BrasilSun
      10/12/2014Nossa Sra. Aparecida - Padroeira do BrasilSun
      11/2/2014FinadosSun
      11/15/2014Proclamação da RepúblicaSat
      12/24/2014Véspera de NatalWed
      12/25/2014NatalThu
      12/31/2014Véspera de Ano NovoWed

       

      PS: Trabalho no idioma Inglês  'M/D/YYYY' .

       

      O nome da tabela é " Feriado "

       

      Até aqui sem problemas.

       

      A minha dúvida consite no comparar o resultado da tabela Feriado com outra tabela, onde a unica ligação são as datas do Feriado e o Vencimento de um documento.

       

      Qual é a melhor form ade fazer isso, o que sugerem, um Lado na tabela Feriado com o Load na outra tabela ( documento) comparam todas as datas da tabela Feriado ?

       

      Sugerem outra opção?

       

       

      Minha dúvida é com referencia a ajunção e compraração de dados entre as duas tabelas e não calculo entre elas.