PDA

Ver la Versión Completa : Consulta y filtro por cantidad


MaMu
18-11-2009, 00:56:13
Tengo una tabla con el detalle de venta de ciertos productos, asi:

TABLA A
---------
ID_PRODUCTO
DESCRIPCION
PRECIO
CANTIDAD
FECHA
EMPLEADO

Yo lo que quiero hacer, es mostrar las ultimas 5 ventas de cada producto, como podria hacerlo? Lo que no se, es como limitar la consulto a 5 ventas de cada producto, o las que yo quiera ver ya sean 2 de cada uno, o las ultimas 10.

Desde ya muchas gracias

Axel_Tech
18-11-2009, 10:04:53
¿Qué motor de base de datos usas? En Firebird se utiliza la cláusula FIRST, en MySQL se usa LIMIT, en SQL Server se usa TOP...
Para mostrar las últimas 5 ventas ordena por fecha de forma descendente (ORDER BY FECHA DESC).

MaMu
18-11-2009, 13:12:00
¿Qué motor de base de datos usas? En Firebird se utiliza la cláusula FIRST, en MySQL se usa LIMIT, en SQL Server se usa TOP...
Para mostrar las últimas 5 ventas ordena por fecha de forma descendente (ORDER BY FECHA DESC).

Uso SQL 2005 y utilizo TOP, pero no quiero limitar la cantidad global de registros, sino a 5 registros de cada elemento, es decir, los ultimos 5 de tornillos, los ultimos 5 de tuercas, etc, todos juntos en una sola consulta

Axel_Tech
18-11-2009, 19:00:58
En una sola consulta no se me ocurre nada, pero sí una alternativa aunque es un poco más engorrosa. Se trata de hacer un procedimiento almacenado.
El funcionamiento sería con un cursor, haciendo una consulta que seleccione cada producto diferente
SELECT DISTINCT DESCRIPCION FROM A
lo almacenarías en una variable
INTO @V_DESCRIPCION
y luego harías un INSERT combinado con SELECT en una tabla temporal de los 5 primeros registros que tienen por descripción el producto por el que vamos (@V_DESCRIPCION)
INSERT INTO TABLA_TEMPORAL
SELECT TOP (5) ID_PRODUCTO, DESCRIPCION, PRECIO, CANTIDAD, FECHA, EMPLEADO
FROM A
WHERE DESCRIPCION = @V_DESCRIPCION ORDER BY FECHA DESC
Y por último una vez ejecutado el SP harías un simple SELECT * de TABLA_TEMPORAL.
Seguramente haya errores de sintaxis y tal pero creo que más o menos te haces una idea.