Média últimos meses ou dias

Delphi

04/02/2005

Pessoal...

Meu sistema (delphi + firebird) controla a entrada de pacientes no pronto socorro do hospital que trabalho.

Preciso fazer algumas médias de atendimento; uma delas é a média de atendimento [b:35c8f375c4]mensal[/b:35c8f375c4] dos últimos [b:35c8f375c4]10 meses[/b:35c8f375c4].
Outra é a média [b:35c8f375c4]diária[/b:35c8f375c4] de atendimento dos últimos [b:35c8f375c4]10 meses [/b:35c8f375c4]também.

Na tabela FICHAS tenho todas as fichas gravadas e nesta tabela existe o campo DATAFICHA do tipo date que guarda a data da ficha de atendimento.

Como poderia realizar este cálculo.... será que um stored procedure era melhor, ou dá pra fazer de outro modo mais simples??


Armando.boza

Armando.boza

Curtidas 0

Respostas

Rômulo Barros

Rômulo Barros

04/02/2005

Vamos fazer um método para cálcular a média dos últimos 10 meses. Baseado neste método, vc conseguirá desenvolver o método para as médias dos dias.

...
Uses
   DateUtils;

...
...

procedure TfrmPrincipal.Button1Click(Sender: TObject);
Var
  QueryMedAtendMes : TSQLQuery;
begin
   Try
      QueryMedAtendMes := TSQLQuery.Create(Nil);
      With(QueryMedAtendMes)Do
      Begin
         SQLConnection := MeuSqlConnection;
         SQL.Text := ´ SELECT (COUNT(*) / 10)As MediaMensal ´
                  +  ´ FROM   FICHAS   ´
                  +  ´ WHERE  DATAFICHA BETWEEN :DTINICIAL AND :DTFINAL ´;
         Params[0].AsDate := IncMonth(Date,-10); // Dez meses atrás da data atual
         Params[1].AsDate := Date;
         Open();
         ShowMessage(´Médias de Atendimentos mensais nos últimos 10 meses: ´ + Fields[0].AsString);
      End;
   Finally
      FreeAndNil(QueryMedAtendMes);
   End;
end;


[color=red:9bee8cdd8d][b:9bee8cdd8d]Espero ter ajudado.[/b:9bee8cdd8d][/color:9bee8cdd8d] :wink: :wink:


GOSTEI 0
Armando.boza

Armando.boza

04/02/2005

Amigo... sua explicação não poderia ser melhor... muito obrigado...

Agora, eu estou um pouco confuso pois meus conhecimentos em programação não são muito grandes... mas pelo que entendi vc cria uma query direto no comando e no final vc descarta ela ou ela continua criada?

Muito obrigado

[quote:a1829a1390=´Undeclared Identifier´]Vamos fazer um método para cálcular a média dos últimos 10 meses. Baseado neste método, vc conseguirá desenvolver o método para as médias dos dias.

...
Uses
   DateUtils;

...
...

procedure TfrmPrincipal.Button1Click(Sender: TObject);
Var
  QueryMedAtendMes : TSQLQuery;
begin
   Try
      QueryMedAtendMes := TSQLQuery.Create(Nil);
      With(QueryMedAtendMes)Do
      Begin
         SQLConnection := MeuSqlConnection;
         SQL.Text := ´ SELECT (COUNT(*) / 10)As MediaMensal ´
                  +  ´ FROM   FICHAS   ´
                  +  ´ WHERE  DATAFICHA BETWEEN :DTINICIAL AND :DTFINAL ´;
         Params[0].AsDate := IncMonth(Date,-10); // Dez meses atrás da data atual
         Params[1].AsDate := Date;
         Open();
         ShowMessage(´Médias de Atendimentos mensais nos últimos 10 meses: ´ + Fields[0].AsString);
      End;
   Finally
      FreeAndNil(QueryMedAtendMes);
   End;
end;


[color=red:a1829a1390][b:a1829a1390]Espero ter ajudado.[/b:a1829a1390][/color:a1829a1390] :wink: :wink:[/quote:a1829a1390]


GOSTEI 0
Rômulo Barros

Rômulo Barros

04/02/2005

Amigo... sua explicação não poderia ser melhor... muito obrigado... Agora, eu estou um pouco confuso pois meus conhecimentos em programação não são muito grandes... mas pelo que entendi vc cria uma query direto no comando e no final vc descarta ela ou ela continua criada? Muito obrigado [quote:49a20821b0=´Undeclared Identifier´]Vamos fazer um método para cálcular a média dos últimos 10 meses. Baseado neste método, vc conseguirá desenvolver o método para as médias dos dias. ...
Uses
   DateUtils;

...
...

procedure TfrmPrincipal.Button1Click(Sender: TObject);
Var
  QueryMedAtendMes : TSQLQuery;
begin
   Try
      QueryMedAtendMes := TSQLQuery.Create(Nil);
      With(QueryMedAtendMes)Do
      Begin
         SQLConnection := MeuSqlConnection;
         SQL.Text := ´ SELECT (COUNT(*) / 10)As MediaMensal ´
                  +  ´ FROM   FICHAS   ´
                  +  ´ WHERE  DATAFICHA BETWEEN :DTINICIAL AND :DTFINAL ´;
         Params[0].AsDate := IncMonth(Date,-10); // Dez meses atrás da data atual
         Params[1].AsDate := Date;
         Open();
         ShowMessage(´Médias de Atendimentos mensais nos últimos 10 meses: ´ + Fields[0].AsString);
      End;
   Finally
      FreeAndNil(QueryMedAtendMes);
   End;
end;
[color=red:49a20821b0][b:49a20821b0]Espero ter ajudado.[/b:49a20821b0][/color:49a20821b0] :wink: :wink:
[/quote:49a20821b0]

[color=red:49a20821b0]Eu instancio uma query em runtime e, após exibir o resultado no [b:49a20821b0]ShowMessage[/b:49a20821b0], eu Libero a query de memória através da linha [b:49a20821b0]FreeAndNil(QueryMedAtendMes); [/b:49a20821b0][/color:49a20821b0]


GOSTEI 0
Armando.boza

Armando.boza

04/02/2005

Amigo....

Esqueci de perguntar... aquela função IncMonth.. ela pega só o mes da data e diminui 10...certo!?..

Mas e para calcular os dias dos últimos 10 meses... existe outra função parecida???

[quote:4bcabd405b=´Undeclared Identifier´]
Amigo... sua explicação não poderia ser melhor... muito obrigado... Agora, eu estou um pouco confuso pois meus conhecimentos em programação não são muito grandes... mas pelo que entendi vc cria uma query direto no comando e no final vc descarta ela ou ela continua criada? Muito obrigado [quote:4bcabd405b=´Undeclared Identifier´]Vamos fazer um método para cálcular a média dos últimos 10 meses. Baseado neste método, vc conseguirá desenvolver o método para as médias dos dias. ...
Uses
   DateUtils;

...
...

procedure TfrmPrincipal.Button1Click(Sender: TObject);
Var
  QueryMedAtendMes : TSQLQuery;
begin
   Try
      QueryMedAtendMes := TSQLQuery.Create(Nil);
      With(QueryMedAtendMes)Do
      Begin
         SQLConnection := MeuSqlConnection;
         SQL.Text := ´ SELECT (COUNT(*) / 10)As MediaMensal ´
                  +  ´ FROM   FICHAS   ´
                  +  ´ WHERE  DATAFICHA BETWEEN :DTINICIAL AND :DTFINAL ´;
         Params[0].AsDate := IncMonth(Date,-10); // Dez meses atrás da data atual
         Params[1].AsDate := Date;
         Open();
         ShowMessage(´Médias de Atendimentos mensais nos últimos 10 meses: ´ + Fields[0].AsString);
      End;
   Finally
      FreeAndNil(QueryMedAtendMes);
   End;
end;
[color=red:4bcabd405b][b:4bcabd405b]Espero ter ajudado.[/b:4bcabd405b][/color:4bcabd405b] :wink: :wink:
[/quote:4bcabd405b]

[color=red:4bcabd405b]Eu instancio uma query em runtime e, após exibir o resultado no [b:4bcabd405b]ShowMessage[/b:4bcabd405b], eu Libero a query de memória através da linha [b:4bcabd405b]FreeAndNil(QueryMedAtendMes); [/b:4bcabd405b][/color:4bcabd405b][/quote:4bcabd405b]


GOSTEI 0
Marcosrocha

Marcosrocha

04/02/2005

Amigo.... Esqueci de perguntar... aquela função IncMonth.. ela pega só o mes da data e diminui 10...certo!?.. Mas e para calcular os dias dos últimos 10 meses... existe outra função parecida???


Existe Sim!! Abra a DateUtils que lá tem IncYear, IncMonth, IncDay, e muitas outras mais...


GOSTEI 0
Rômulo Barros

Rômulo Barros

04/02/2005

:lol: [color=darkblue:eb59f00b94][i:eb59f00b94][b:eb59f00b94]Afe !!! Estão ressucitando defunto agora, é ?[/b:eb59f00b94][/i:eb59f00b94][/color:eb59f00b94]


GOSTEI 0
POSTAR