Function no Mysql
30/06/2018
0
Perguntinha de Iniciante, rsrsrsrs,
Na criação de
Desde já agradeço.
Dirceu Morais
Posts
30/06/2018
Raimundo Pereira
19/07/2018
Dirceu Morais
create or alter procedure fn_viagens ( idata date, ilinha integer) returns ( qviagem integer) as --Faço a declaração da minhas variaveis declare variable line integer; declare variable processou boolean; declare variable tempo integer; declare variable km integer; declare variable ponto varchar(10); declare variable id_ integer; begin --Atribuo valores as variaveis line = 1; Processou = False; qviagem = 0; /* Percorrer o cadastro de viagem */ For select viagem_id, km, tempo, pontos from meia_viagem v WHERE v.data = :idata and v.linha = ilinha into :id, :km, :tempo, :pontos do Begin If line = 1 Then Begin if (km > 0) and (tempo > 2) Then Begin qViagem := qViagem + 1; Processou := True; end end Else begin if id_ = 1 Then Begin if (km > 0) Then Begin if ((pontos = 'PT1 - PT1') and (tempo > '00:02:00')) or (pontos <> 'PT1 - PT1') Then Begin qviagem := qviagem + 1; Processou := True; end; end; end Else if Not Processou and (km> > 0) and (tempo > 2) Then Begin qviagem := qviagem + 1; Processou := True; end; Ponto := pontos; end; line = line + 1; end; end
Essa função me retorna a quantidade de viagem realizadas, mas para considerar uma viagem, o tempo tem que ser maior que 2 e id = 1 ou
id > 2
Como eu faço essa mesma função no Mysql?
19/07/2018
Dirceu Morais
Talvez não seja necessário fazer uma Function.
Vamos ao problema:
Tenho um bloco viagens, onde é registrado o tempo de cada ponto.
Se o tempo total do bloco for menor que 5:00minutos é porque não foi realizado a viagem.
Minha tabela é mais ou menos assim:
|viagem_id|carro|data |linha|pontos |inicio**|**fim***|tempo***|bloco| | 1|74039|2018-05-02|4148 |PT1 - PT2|11:29:28|11:29:38|00:00:10| 648| | 2|74039|2018-05-02|4148 |PT2 - PT1|11:37:40|12:17:30|00:39:50| 648| | 3|74039|2018-05-02|4148 |PT1 - PT2|12:18:14|13:02:12|00:43:58| 648| | 1|80021|2018-05-02|4148 |PT1 - PT2|17:02:48|17:03:00|00:00:12| 792| | 2|80021|2018-05-02|4148 |PT2 - PT1|17:04:18|17:39:18|00:35:00| 792| | 3|80021|2018-05-02|4148 |PT1 - PT2|17:40:02|18:24:40|00:44:38| 792| | 4|80021|2018-05-02|4148 |PT2 - PT2|18:25:56|18:25:56|00:00:00| 792|
Neste exemplo eu teria 2 viagens.
Deu um branco
Socorro.
20/07/2018
Dirceu Morais
Com relação a criação da função no mysql continuo "apanhando", mas pelo menos consegui fazer a instrução no sql sem a necessidade da função.
Para quem precisar, vai ai a solução:
select Count(distinct Bloco) from meia_viagem v WHERE v.data = :Data and v.linha = :Linha and v.tempo > '00:05:00'
Ou seja, eu usei o count(Distinct...) ao invés de usar count(*)
Brigadú
Clique aqui para fazer login e interagir na Comunidade :)