Ver Mensaje Individual
  #17  
Antiguo 02-10-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Pero las funciones windows LO VALEN. Son geniales y resuelven un montón de escenarios.

P.D: Y si uno tiene la opción, es bueno siempre ir actualizando el motor a lo ultimo. No solo porque por lo general mejoran desempeño y resuelven bugs, sino porque el SQL se ha ido actualizando!

A proposito, asi es como quedaria:

Código SQL [-]
-- Puse los datos en memoria pa testear
WITH datos AS (
SELECT 'cliente 1' as cliente, '21-09-2017' as fecha, 40 AS importe
UNION ALL
SELECT 'cliente 2', '22-09-2017', 30
UNION ALL
SELECT 'cliente 3', '23-09-2017', 20
UNION ALL
SELECT 'cliente 4', '23-09-2017', 30
UNION ALL
SELECT 'cliente 5', '23-09-2017', 20
)

SELECT * FROM (
   -- Aqui es la magia. Usando la funcion WINDOW SUM que recorre (como un FOR) ordenado por cliente. Es importante tener en cuenta el orden. Esto acumula la suma
    SELECT *, SUM(importe) OVER (ORDER BY cliente) AS acumulado FROM datos
) reporte
-- Y por ultimo se filtra
WHERE acumulado < 100
__________________
El malabarista.
Responder Con Cita