Somatoria em MySQL ?

Eu tenho uma tabela com um relatório de várias maquinas. Essas máquinas tem um contador dentro, é como se fosse uma maquina que recebe dinheiro. assim que entra uma nota, aumenta o contador.

Fiz um robo que lê o status da maquina e pega o valor atual que ela tem, mas, lá só tem o valor atual. e eu vou juntando em uma tabela a parte como um histórico. Preciso criar um relatório e estou fazendo com IReport. Peguei todos os valores tudo, até ai tudo certo (ok).

Mas eu preciso que, quando mostre o valor, mostre quanto que entrou de dinheiro naquele momento. Logo, preciso mostrar somente o incremental. Como eu poderia fazer isso?

Exemplo: dia 1 entrou 100,00 na maquina. dia 2 entrou 150.

Mas o robô só vai colocar no banco de dados:

dia 1 status 100,00
dia 2 status 150,00

No relatório não pode ser dia 2 ENTROU 150,00. tem que aparecer que, no dia 2, entrou 50,00, não sei se fui claro.

  1. Dê exemplos de sua tabela?
  2. As gravações e depois as pesquisas como os resultados devem sair?

Na minha tabela tem esses campos:

id | idMaquina | data | valor dentro da maquina

só vai incrementando esse contador, exemplo:

1 | 1 | 01/01/2016 | 50,00 //primeiro registro da maquina 1 com 50,00 inicial
2 | 2 | 01/01/2016 | 10,00 //primeiro registro da maquina 2 com 10,00 inicial
3 | 1 | 02/01/2016 | 60,00 //segundo registro da maquina 1 com 60,00 logo, entrou 10,00

fazer isso no java seria traquilo.

A treta é falar que… dia 02/01/2016, entrou 10,00 na maquina USANDO SQL.. Não faço a menor idéia de como eu poderia fazer isso.

1 curtida

Faça assim:

SELECT idMaquina,data,SUM(valor_das_notas) FROM tabela GROUP BY idMaquina,data;

isso me retornaria a somatoria correto?

nao entrou 60,00 no dia 2… entrou 10,00.

editei o nome da coluna pra ficar melhor pra entender.

Isso, ele soma e agrupa a somatória que entrou por máquina por dia.

eu nao tenho controle de quanto entrou…

o robo só ve o estado atual.

eu preciso infomar quanto entrou.

no dia 2… nao entoru 60 reais, entrou 10.

DEMO

SELECT a.id, a.idMaquina, a.data, a.valor,        
abs((select min(c.valor) from table3 c where a.idMaquina = c.idMaquina group by c.idMaquina limit 1) - valor) valor_entrada
FROM table3 a
GROUP BY data, idMaquina
ORDER BY idMaquina, data

DEMO

Cara, exatamente isso!!!, mas como isso era só um exemplo do problema que eu tenho. Você pode me explicar oque seria esses a. e ABS ?

  • ABS, retornar o valor absoluto, no caso ele retornar negativo então para tirar o negativo eu mando ele executar essa função.

mysql> SELECT ABS(2);
        -> 2
mysql> SELECT ABS(-32);
        -> 32
  • “a,” é um apelido ou alias renomeando table3 para a..

legal, entendi.

agora eu faço essa sql para vir aquele resultado

select * from counters_history order by date ASC

dai ele vem os dados como por ex. a coluna C1 E A C2.

c1 é coin in. e a c2 é coin out.

preciso fazer essa magica de pegar o valor anterior da c1 e fazer os difs.

como ficaria? tenho que incluir muitos outros campos, mas ja me daria um exemplo do caminho das pedras

Não sabia que podia simplesmente fazer table3 a. Sem um “AS”.
Isto é característico somente do MySQL?

A solução já foi dita, agora transforme para sua realidade.

Acredito que outros bancos tem, pelo menos MySQL e SQL Server eu sei que funciona.