[firebase-br] Consulta com tempos.

Gladiston Santana gladiston em vidy.com.br
Ter Abr 2 13:29:58 -03 2019


Eu não sei se posso te ajudar porque não entendi o problema direito, mas ao
usar calculo com datas acho perigoso (1) valores possuírem nulos, (2)
horário final menor que o inicial, (3) misturar time, timestamp e date em
operações matemáticas e (4) usar operadores lógicos como between ou >=< sem
considerar o horario.
Um erro comum de misturar date, time e timestamp é quando um campo
(chamemos de last_update) é timestamp e ai você usa where
last_update>='01.01.2019' and last_update <='31.01.2019', pois ao não usar
a porção de hora, o padrao é assumir 00:00 o que causará a perda do
movimento do dia 31.

Se estiver usando FB3, há uma forma eficiente de esconder os cast. dateadd,
iif,... na query e agregadores e ter um SQL mais confiável. Como? Crie uma
função ou método SQL que ao jogar os parametros necessario retone o que
você precisa, não estou falando de procedure, dá para fazer com procedure
também, mas algumas coisas são tão simples como conversões que uma função
SQL seria melhor porque elas permitem o uso em agregadores como sum.
Tenho um calculo de custo que por exemplo considera itens no almoxarifado
cujas materias primas estão cadastrados em "m" e outras em "cm", quando
tenho que usar um sum, uso uma função SQL que criei para converter as
diferentes medidas e nulos e retornando sempre um denominador comum em
"mm". Isso retirou case/IIF/cast da query que ficaria muito complexa.

[]´s e sucesso.


Em ter, 2 de abr de 2019 às 08:49, <ti em telassantoantonio.com.br> escreveu:

> Bom dia a todos, esta é minha primeira tentativa de utilizar a lista então
> se estiver fazendo algo errado, me perdoem.
> Minha dúvida é a seguinte, tenho a base do sistema que grava o tempo
> inicial, final e as paradas de cada orem de serviço da produção, então fiz
> um sql para poder calcular o tempo de cada ordem através de relatórios, mas
> no campo de tempos por mt² acaba arredondando os minutos, tanto para cima
> quanto para baixo, trazendo sempre o minuto cheio EX: 00:01:00 ou 00:03:00.
> Reparem também que estou utilizando o campo DATEADD ( minute to time
> '00:00:00') para formatar os campos em exibição de minutos e segundos.
> Aceito qualquer sugestão para melhorias, desde já deixo meu agradecimento.
> SELECT PRODUTO, QTD_PRODUZIDA, (TEMPOGERAL/60) AS Horas_TOTAL,
> DATEADD(TEMPOPARADO MINUTE TO TIME '00:00') AS TEMPO_PARADO,
> DATEADD(TEMPOPRODUCAO MINUTE TO TIME '00:00') AS TEMPO_PRODUCAO,
> DATEADD((tempoproducao/QTD_PRODUZIDA) MINUTE TO TIME '00:00:00') as
> TEMPOS_POR_MT2,
> DATEADD(tempoproducao MINUTE TO TIME '00:00:00') AS TEMPOPRODUCAO
>
>



Mais detalhes sobre a lista de discussão lista