7 feb 2011

PL SQL - Seleccionar los N Top por categoria

Hola!!!

Hoy estuve tratando de descifrar como lograr que en una sola consulta vinieran las ultimas 5 facturas emitidas por tienda en el 2010.

Después de leer un "poco" y navegar otro poco, quemar un poco de neuronas, etc, etc...

Mi intención era poder hacer algo como

Select periodo, tienda, serie, max(factura)
from CC_ventas


Pero que en lugar de traerme solo una factura me trajera 5 por tienda.

El resultado quedo algo así:

select a.periodo, a.tienda, a.serie, a.factura,
count(*) as ranking
from cc_ventas a, cc_ventas b
where a.periodo = b.periodo
and a.tienda = b.tienda
and a.serie = b.serie
and a.factura <= b.factura and a.periodo = '2010' group by a.periodo, a.tienda, a.serie, a.factura having count(*) <= 5 order by a.periodo, a.tienda, a.serie, count(*) desc;

OJO: dos cosas importantes 1. Si ven la linea and a.factura <= b.factura hace un join de el mismo y todos menos el. Si no desean obtener los últimos sino los primeros registros solo deben de cambiarlo a >=.

2. Si desean traer mas de 5 registros por categoría solo deben de cambiar el valor en la linea: having count(*) <= 5

El código de access que me sirvió de ejemplo esta Aquí.

Espero les sea de utilidad.

No hay comentarios: