Calculo de tempo médio SQL
Bom dia amigos
tenho a seguinte consulta.
ele retorna todas as etapas com um campo contendo a data e outro campo contendo a hora.
como eu poderia fazer para calcular o tempo entre uma etapa e outra?
no aguardo da ajuda de voces um forte abraço.
tenho a seguinte consulta.
select a.cdfil, a.nrrqu, a.serier, a.data, a.hora, a.cdetapa, b.descricao from fc12500 a, fc12540 b where
b.cdetapa=a.cdetapa and
a.nrrqu= 6650 and
a.cdopera=1
order by a.data, a.horaele retorna todas as etapas com um campo contendo a data e outro campo contendo a hora.
como eu poderia fazer para calcular o tempo entre uma etapa e outra?
no aguardo da ajuda de voces um forte abraço.
Reginaldo Souza
Curtidas 0
Melhor post
Emerson Nascimento
25/05/2018
supondo que seu campo a.data seja do tipo data, e o seu campo a.hora seja caractere, você pode obter o tempo da etapa anterior assim:
e, para calcular o tempo decorrido entre elas, pode ser assim (pode ter algum erro de sintaxe, mas a idéia geral é essa):
select
a.cdfil, a.nrrqu, a.serier, a.cdetapa, b.descricao,
convert(datetime, cast(a.data as varchar(10))+' '+a.hora) datahoraatual,
(select top 1 convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora)
from fc12500 a2
where a2.nrrqu = a.nrrqu and
a2.cdopera = a.cdopera and
convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora) <
convert(datetime, cast(a.data as varchar(10))+' '+a.hora)
order by convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora) desc) datahoraanterior
from
fc12500 a
inner join
fc12540 b on b.cdetapa = a.cdetapa
where
a.nrrqu = 6650 and
a.cdopera = 1
order by
a.data, a.horae, para calcular o tempo decorrido entre elas, pode ser assim (pode ter algum erro de sintaxe, mas a idéia geral é essa):
select
t.*,
convert(time, t.datahoraatual - t.datahoraanterior, 8) intervalo
from (
select
a.cdfil, a.nrrqu, a.serier, a.cdetapa, b.descricao,
convert(datetime, cast(a.data as varchar(10))+' '+a.hora) datahoraatual,
(select top 1 convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora)
from fc12500 a2
where a2.nrrqu = a.nrrqu and
a2.cdopera = a.cdopera and
convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora) <
convert(datetime, cast(a.data as varchar(10))+' '+a.hora)
order by convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora) desc) datahoraanterior
from
fc12500 a
inner join
fc12540 b on b.cdetapa = a.cdetapa
where
a.nrrqu = 6650 and
a.cdopera = 1
) t
order by
t.data, t.horaGOSTEI 2
Mais Respostas
Reginaldo Souza
25/05/2018
vou testar aqui e ja posto o resultado. vamos ver
GOSTEI 0
Reginaldo Souza
25/05/2018
supondo que seu campo a.data seja do tipo data, e o seu campo a.hora seja caractere, você pode obter o tempo da etapa anterior assim:
e, para calcular o tempo decorrido entre elas, pode ser assim (pode ter algum erro de sintaxe, mas a idéia geral é essa):
select
a.cdfil, a.nrrqu, a.serier, a.cdetapa, b.descricao,
convert(datetime, cast(a.data as varchar(10))+' '+a.hora) datahoraatual,
(select top 1 convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora)
from fc12500 a2
where a2.nrrqu = a.nrrqu and
a2.cdopera = a.cdopera and
convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora) <
convert(datetime, cast(a.data as varchar(10))+' '+a.hora)
order by convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora) desc) datahoraanterior
from
fc12500 a
inner join
fc12540 b on b.cdetapa = a.cdetapa
where
a.nrrqu = 6650 and
a.cdopera = 1
order by
a.data, a.horae, para calcular o tempo decorrido entre elas, pode ser assim (pode ter algum erro de sintaxe, mas a idéia geral é essa):
select
t.*,
convert(time, t.datahoraatual - t.datahoraanterior, 8) intervalo
from (
select
a.cdfil, a.nrrqu, a.serier, a.cdetapa, b.descricao,
convert(datetime, cast(a.data as varchar(10))+' '+a.hora) datahoraatual,
(select top 1 convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora)
from fc12500 a2
where a2.nrrqu = a.nrrqu and
a2.cdopera = a.cdopera and
convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora) <
convert(datetime, cast(a.data as varchar(10))+' '+a.hora)
order by convert(datetime, cast(a2.data as varchar(10))+' '+a2.hora) desc) datahoraanterior
from
fc12500 a
inner join
fc12540 b on b.cdetapa = a.cdetapa
where
a.nrrqu = 6650 and
a.cdopera = 1
) t
order by
t.data, t.horadeu esse erro nessa consulta
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 4, column 16.
t.
GOSTEI 0
Emerson Nascimento
25/05/2018
qual a versão do firebird?
GOSTEI 0
Reginaldo Souza
25/05/2018
qual a versão do firebird?
2.5
GOSTEI 0
Emerson Nascimento
25/05/2018
select
t.*,
datediff(second, t.datahoraanterior, t.datahoraatual) dif_segundos
from (
select
a.cdfil, a.nrrqu, a.serier, a.cdetapa, b.descricao,
cast(cast(a.data as varchar(10))||' '||a.hora as timestamp) datahoraatual,
(select first 1 cast(cast(a2.data as varchar(10))||' '||a2.hora as timestamp)
from fc12500 a2
where a2.nrrqu = a.nrrqu and
a2.cdopera = a.cdopera and
cast(cast(a2.data as varchar(10))||' '||a2.hora as timestamp) <
cast(cast(a.data as varchar(10))||' '||a.hora as timestamp)
order by cast(cast(a2.data as varchar(10))||' '||a2.hora as timestamp) desc) datahoraanterior
from
fc12500 a
inner join
fc12540 b on b.cdetapa = a.cdetapa
where
a.nrrqu = 6650 and
a.cdopera = 1
) t
order by
t.datahoraatual
GOSTEI 2
Reginaldo Souza
25/05/2018
MUITO OBRIGADO !!! deu certo !!
select
t.*,
datediff(second, t.datahoraanterior, t.datahoraatual) dif_segundos
from (
select
a.cdfil, a.nrrqu, a.serier, a.cdetapa, b.descricao,
cast(cast(a.data as varchar(10))||' '||a.hora as timestamp) datahoraatual,
(select first 1 cast(cast(a2.data as varchar(10))||' '||a2.hora as timestamp)
from fc12500 a2
where a2.nrrqu = a.nrrqu and
a2.cdopera = a.cdopera and
cast(cast(a2.data as varchar(10))||' '||a2.hora as timestamp) <
cast(cast(a.data as varchar(10))||' '||a.hora as timestamp)
order by cast(cast(a2.data as varchar(10))||' '||a2.hora as timestamp) desc) datahoraanterior
from
fc12500 a
inner join
fc12540 b on b.cdetapa = a.cdetapa
where
a.nrrqu = 6650 and
a.cdopera = 1
) t
order by
t.datahoraatual
GOSTEI 0