Hola niko7700:
Hay varias formas en que puedes plantear la solución, la solución está en calcular el acumulado de los registros, ya que este es el criterio que quieres utilizar para filtrar los datos:
checa este script:
Código SQL:
Ver originalDECLARE @Compras TABLE (FECHA datetime, COD VARCHAR(4), UND INT)
INSERT INTO @Compras VALUES ('2011-01-01', 'C011', 4)
INSERT INTO @Compras VALUES ('2011-02-01', 'C012', 5)
INSERT INTO @Compras VALUES ('2011-02-10', 'C011', 2)
INSERT INTO @Compras VALUES ('2011-05-05', 'C011', 6)
SELECT * FROM @Compras
FECHA COD UND
----------------------- ---- -----------
2011-01-01 00:00:00.000 C011 4
2011-02-01 00:00:00.000 C012 5
2011-02-10 00:00:00.000 C011 2
2011-05-05 00:00:00.000 C011 6
SELECT
C1.fecha, C1.cod, C1.und,
(SELECT SUM(und) FROM @Compras C2
WHERE C2.cod = C1.cod AND C2.fecha >= C1.fecha
GROUP BY cod
) acumulado
FROM @Compras C1
WHERE C1.cod = 'C011'
ORDER BY fecha DESC
fecha cod und acumulado
----------------------- ---- ----------- -----------
2011-05-05 00:00:00.000 C011 6 6
2011-02-10 00:00:00.000 C011 2 8
2011-01-01 00:00:00.000 C011 4 12
la segunda consulta es sólo para ejemplificar cómo se está obteniendo el acumulado... lo único que faltaría hacer es filtrar esta información para obtener aquellos registros donde el acumulado sea menor o igual a 8... puedes utilizar la subconsulta en el WHERE en lugar del SELECT para hacer el filtrado.
Como te comento, esta es solo una manera para hacerlo, aunque hay muchas otras, pregunta a SAN GOOGLE cómo puedes obtener el acumulado de una consulta, tal vez encuentres alguna opción más sencilla.
Saludos
Leo.