Função que encontra o menor registo

9 respostas
mysql
C

preciso de uma função que compare o timestamp dos registo da tabela acima. fiz esta operação não sei se é o caminho certo.

CREATE FUNCTION retornar_menor_timeStamp(@timestamp_Old int, @timestamp_New int)

returns timestamp

As

BEGIN

DECLARE @valor1 int

DECLARE @valor2 int

DECLARE @timestamp_Old int

DECLARE @timestamp_New int

DECLARE @quantidade int

SET @valor1=1

SET @valor2=1

SET @quantidade=1

SET @quantidade=@quantidade+(SELECT  Count(*)from  armazem)

while @valor1<@quantidade

SET @valor2=@valor1+1

while @valor2<@quantidade
BEGIN
if @timestamp_Old>@timestamp_New
rollback
else
@timestamp_Old<@timestamp_New
@timestamp_New=@timestamp_New
SET @valor1=@valor1+1
END

SET @valor2=@valor2+1
END
RETURN @timestamp_New
END

9 Respostas

J

Qual objetivo dessa funcão?

C

retornar o menor timestamp de cada operação da tabela

J

Basta fazer select min(campo_time) from tabela where operacao = parametroOperacao

C

Tenho de compara o valor de timestamp_Old com o valor de timestamp_New para encontrar o minimo.
cada registo se encontra da tabela de que ser comparado para encontrar o menor e COMMIT

J

Voce pode colocar a condicao que quiser na clausula where.

Commit em que? Nao vi operacao de escrita no seu codigo.

C

Esta tabela de operações registas todas as operações ocorridas enquanto as máquinas estavam desligada da rede. Se reparares a coluna timestampNew os ID estão repetidos devido funcionamento em ambiente de desconexão.

Por exemplo: O cliente 1 comprou 100 chocolates na máquina A as 09:01. Depois voltou a compara mais 18 já nesta altura na maquina B as 09:15. todas estas operações são feita em ambiente desconectado.

Quando a rede retorna a sua conexão estes registo são propagados para a tabela de registo para devida regularização de contas dos clientes

J

Se o MySql fica nesse ambiente desconectado, nenhum problema pra fazer o Select Min na condição que quiser.

C

Se calhar não lhe fiz entender.
O MIN será retornado apenas uma vez
O que se precisa é que se percorra a tabela do primeiro ao ultimo registo para comparamos o timeStamp_old e timeStamp_new quantas vezes for necessário

Os registo que tiverem menor valor é que devem ser inserido no servidor

J

Define sua dúvida, primeiro você falou em querer encontrar o menor registro. Para encontrar o menor registro, você pode usar Min() e no Where a condição que quiser, inclusive agrupar com Group By.

E para ter o controle total de cada registro, voce pode usar um Cursor, com isso voce percorre todos os registros necessários e aplica suas regras a cada linha programaticamente. Exemplo: https://www.techonthenet.com/mysql/cursors/declare.php

Criado 19 de fevereiro de 2018
Ultima resposta 20 de fev. de 2018
Respostas 9
Participantes 2