tengo la siguiente tabla:SQL suma progresiva
CREATE TABLE tbl_proc(
[proc] float,
subscriber bigint
)
datos:
proc | subscriber
-----|-----------
0.7 | 123456
0.5 | 1234567
0.3 | 12345
0.3 | 45678
0.3 | 1234
0.2 | 123455
0.1 | 894562
Me gustaría encontrar un buen método para agregar una nueva columna a la tabla que representa la suma de las valores anteriores
Resultado:
proc | subscriber | col3
-----|------------|------------
0.7 | 123456 | 0.7
0.5 | 1234567 | 1.2 -- 0.7 + proc
0.3 | 12345 | 1.5
...
me encontré con el siguiente método:
Select a.[proc],SUM(b.[proc])
from tbl_proc a, tbl_proc b
where a.[proc] <= b.[proc] and (a.[proc] <> b.[proc] or a.subscriber >= b.subscriber)
group by a.[proc],a.subscriber
order by a.[proc] desc
En mi mesa de los datos se clasifican descendente por el proc. Además, la columna del suscriptor es única.
Este método que encontré es un poco demasiado caro (mis tablas son grandes). Debido a razones de rendimiento, no consideré la solución tipo cursor.
¿Alguna sugerencia?
Actualización:
Googled el problema un poco más y me encontré con la "Actualización a una variable local" solución en esta página:
Por lo como lo probé, esta es la mejor solución hasta ahora.
declare @runningTotal flotar = 0
ACTUALIZACIÓN tbl_proc SET @RunningTotal = new_col = @RunningTotal + [proc] DE tbl_proc
Tal vez debería tratar * * la solución cursor y comparar los resultados, te sorprenderías. Además, ¿ha buscado soluciones a su problema? Busqué en Google "sql running total" y encontré un montón de respuestas. – Tony
@Martin Corregí mi error. Sry –
Este tipo de consulta será mucho * mucho *, mucho más fácil en Denali debido a [mejoras en la cláusula 'OVER'] (http://www.geniiius.com/blog/t-sql-enhancements-over-clause/) , pero está de acuerdo con otros en que necesita un atributo adicional para determinar el orden. – onedaywhen