Código MySQL:
Ver original sum(if(evento
="entrada",valor
,0)) as Entradas
, sum(if(evento
="salida",valor
,0)) as Salidas
, sum(if(evento
="salida",valor
,0))-sum(if(evento
="entrada",valor
,0)) as dif
elemento...Entradas...Salidas...dif
1............... 1200.........2450......1250
2..................230...........530........300
3................1450...........500.......-950
4..................800...........850..........50
El resultado para el elemento 1 es correcto!?!
Creo que por la propiedad asociativa de la suma el resultado debe ser bueno...
+(E1-S1)+(E2-S2)=+E1-S1+E2-S2=+E1+E2-S1-S2=(E1+E2)-(S1
+S2)=SUMA(E1,E2)-SUMA(S1,S2)
Es decir no hace falta aparear los valores...No se si me explico...
No se como deben jugar las entradas sin salida... haciendolo como te propongo actuará así
+(E1-S1)+(E2-0)=...=SUMA(E1,E2)-S1
en el caso que la entrada E2 no tenga su correspondiente S2...
Asociatividad (álgebra)
Parece por tu ejemplo que quieres eliminar las entradas que no tengan salida.... dejame pensar un rato.
Se trataria de elmimiar el ultimo evento de los elementos que tengan un numero impar de eventos....
Esto nos da el elmento 3, el unico que no tiene los eventos apareados...
Ahora se tratari de encontarar los ultimos eventos de los elementos obtenido con la consulta anterior.... (como id es autoincremental MAX(fecha) y MAX(id) retornan el mismo registro) luego...
esto nos da el evento 8, precisamente el que buscabamos....
Ya llegamos!!!
Ahora hay que usar esto para que la primera consulta solo tenga encuenta los eventos que
NO estan en esta ultima
Código MySQL:
Ver original Sum(If(evento
="entrada",valor
,0)) AS Entradas
, Sum(If(evento
="salida",valor
,0)) AS Salidas
, Sum(If(evento
="salida",valor
,0))-Sum(If(evento
="entrada",valor
,0)) AS dif
Puede que tengas que jugar con los alias pero esto da:
elemento...Entradas...Salidas...dif
1............... 1200.........2450......1250
2..................230...........530........300
3..................450...........500..........50
4..................800...........850..........50
!!!
Funcionará siempre que la secuencia temporal sea coherente, es decir que no haya ningun elemento con dos entradas seguidas y que no tengan salida... esto deberias controlarlo antes. Si no fuera el caso habria que buscar otra solución.