Fórum Somar o total de semanas de uma determinada tabela? #367470

02/01/2009

0

Pessoal, bom dia:

Preciso somar o total de semanas de uma determinada tabela.

Exemplo
tenho na tabela gravado assim

26/11/2008 27/11/2008 30/11/2008 01/12/2008 09/12/2008 16/12/2008


Não sei exatamente se nesta tabela ai tem 4 ou 5 semanas no total, pois não sei da onde começa contar a semana.

Só sei que fazendo uns testes aqui pra ver qual semana com uma função do dateUtils
ShowMessage(IntToStr( NthDayOfWeek(dm.cdsHistFaltasTempDATA_FALTA.AsDateTime)));


Vi que o resultado é este
27/11/2008 = quarta semana do mes onze 30/11/2008 = quinta semana do mes onze 01/12/2008 = primeira semana do mes doze 09/12/2008 = segunda semana do mes doze 16/12/2008 = terceira semana do mes doze


Se o resultado é este então a soma das semanas seriam [b:6ff524c955]5 semanas neste periodo de datas.[/b:6ff524c955], segundo eu entendi.

Então como seria o código para varrer a tabela e somar as semanas?

function TrazResultSem
begin 
   with cdsHistFaltasTemp do
   begin
       First;
       while not Eof do
       begin
         {Qual é o codigo pra trazer o resultado}
          Next;
       end;
   end;
Result := {Soma dias da semana}
end;



Espero ter me expressado corretamente na minha duvida.
Grato Adriano


Adriano_servitec

Adriano_servitec

Responder

Posts

02/01/2009

Adriano_servitec

Estou tentando algo assim
function TForm1.CountDSRsInPeriod: Byte;
Var
   DSR: Array[1..6] of Byte;
   I: Byte;
begin
     //Zera as variáveis
     Result := 0;
     for I := Low(DSR) to High(DSR) do
         DSR[I] := 0;

     With DM do
     begin
          if (not cdsHistFaltasTemp.Active) or (cdsHistFaltasTemp.IsEmpty) then
             Exit;
          dm.cdsHistFaltasTemp.First;
          while not dm.cdsHistFaltasTemp.Eof do
          begin
              Case NthDayOfWeek(cdsHistFaltasTempDATA_FALTA.AsDateTime) of
                1: begin
                       DSR[1] := 1;
                   end;
                2: begin
                       DSR[2] := 1;
                   end;
                3: begin
                       DSR[3] := 1;
                   end;
                4: begin
                       DSR[4] := 1;
                   end;
                5: begin
                       DSR[5] := 1;
                   end;
                6: begin
                       DSR[6] := 1;
                   end;
              end;
              dm.cdsHistFaltasTemp.Next;
          end;
     end;
     // Result recebe o valor dos DSRs
     // do período informado
     for I := Low(DSR) to High(DSR) do
         Result := Result + DSR[I];
end;


Mais não está me trazendo certo a sima da quantidade de semanas que tem na tabela.


Responder

Gostei + 0

02/01/2009

Builder

Vamos ver, se entendi, talvez criar um campo chave na seguinte composição:

AAAAMMS

Onde teriamos:

AAAA = Ano
MM = Mês
S = Semana

O total de registros da tabela seria o total de semanas, já que não teriamos duplicações, porque o Ano e o Mês também seriam utilizados como identificadores.


Responder

Gostei + 0

02/01/2009

Adriano_servitec

Vamos ver, se entendi, talvez criar um campo chave na seguinte composição: AAAAMMS Onde teriamos: AAAA = Ano MM = Mês S = Semana O total de registros da tabela seria o total de semanas, já que não teriamos duplicações, porque o Ano e o Mês também seriam utilizados como identificadores.
Olá amigo, obrigado por responder, mais agora quem não intendeu fui eu, o que eu preciso é somar as semanas.
Tipo pegar o que esta na tabela
26/11/2008
27/11/2008 = 1

30/11/2008 = 2

01/12/2008 = 3

09/12/2008 = 4

15/12/2008
16/12/2008 = 5
[b:1201c8c4b5]Total 5 semanas[/b:1201c8c4b5]

Acho que é assim a soma, mais não sei como fazer


Responder

Gostei + 0

02/01/2009

Builder

Vamos de novo, agora utilizando os seus exemplos. Fazendo uma chave formada por Ano, Mês e pelo valor retornado pela função NthDayOfWeek teremos (atenção, no teste que fiz aqui a função NthDayOfWeek retornou valores diferentes aos que você mencionou anteriormente):

26/11/2008 = 4
27/11/2008 = 4
Chave no formato AAAAMMS = 2008114

30/11/2008 = 5
Chave no formato AAAAMMS = 2008115


01/12/2008 = 1
Chave no formato AAAAMMS = 2008121

09/12/2008 = 2
Chave no formato AAAAMMS = 2008122

15/12/2008 = 3
16/12/2008 = 3
Chave no formato AAAAMMS = 2008123

Considerando que tabela terá um campo denomidado chave (AAAAMMS onde A=Ano, M=Mes e S=Número da Semana) que terá apenas um registro único para cada valor (UNIQUE).

CHAVE
2008114
2008115
2008121
2008122
2008123
----------
Total de 5 chaves diferentes, que na verdade estarão representando as 5 semanas considerando também o ano e o mês para que uma semana do mês/ano X seja distinguida do mês/ano Y.

Na hora de incluir registros, procurar antes na tabela se a chave já existe. Se existir, apenas acumula demais campos (valores), senão inclui e registra valores.


Responder

Gostei + 0

02/01/2009

Adriano_servitec

Ok, amigo, muito obrigado, vou ver aqui como fazer, mais vc ja me deu uma boa idéia.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar