18-01-2011, 14:08
hola gente, necesito la colaboración de todos los cráneos de la UTN para resolver un problema con unos datos en sql server.
tengo la siguiente tabla:
es una lista de precios de productos. cada producto puede ser provisto por distintos proveedores, y tener varias categorías según la calidad.
los precios duran X días, entonces se va manteniendo un historial de precios.
así podemos saber, por ejemplo, que las papas categoría A del proveedor 1 valían $2 desde el 01/01/01 hasta el 05/01/01.
obviamente para un mismo proveedor, producto, categoría, y período, no puede haber haber dos precios diferentes.
¿cuál es el problema? que en algún momento se introdujo un error en la carga, y quedaron inconsistencias del tipo que mencioné anteriormente.
por ejemplo, sería incorrecto tener 2 registros así:
bueno, necesito un script sql que me permita detectar estas inconsistencias. o sea, tendría que buscar y acomodar los datos, de forma que pueda comparar los períodos que se superponen. la salida debería ser los registros que son inconsistentes.
logré hacerlo en smalltalk (casi una papa diría), pero el problema que tenemos es que debemos ejecutarlo sobre una base con miles de productos, donde las columnas a comparar no son categoría, proveedor y nombre, sino que son 5 más, y tiene que evaluar todo un año para detectar inconsistencias viejas.
si puedo lograr que el motor de base de datos resuelva el problema, seguro lo hace mucho más rápido.
bueno, les dejo la inquietud. gracias de antemano, salu2.
tengo la siguiente tabla:
| categoria | proveedor | nombre | fecha inicio | fecha fin | precio |
| A | 1 | papa | 01/01/01 | 05/01/01 | 2 |
| A | 2 | papa | 01/01/01 | 05/01/01 | 3 |
| A | 3 | papa | 01/01/01 | 05/01/01 | 2,5 |
| B | 1 | papa | 01/01/01 | 05/01/01 | 1 |
etc
es una lista de precios de productos. cada producto puede ser provisto por distintos proveedores, y tener varias categorías según la calidad.
los precios duran X días, entonces se va manteniendo un historial de precios.
así podemos saber, por ejemplo, que las papas categoría A del proveedor 1 valían $2 desde el 01/01/01 hasta el 05/01/01.
obviamente para un mismo proveedor, producto, categoría, y período, no puede haber haber dos precios diferentes.
¿cuál es el problema? que en algún momento se introdujo un error en la carga, y quedaron inconsistencias del tipo que mencioné anteriormente.
por ejemplo, sería incorrecto tener 2 registros así:
porque en ese caso (mismo producto, mismo proveedor, misma categoría) tenemos 3 días que se superponen, con diferente precio. entonces si quiero saber el precio al día 04/01/01 tengo un problema. ¿se ve?
| categoria | proveedor | nombre | fecha inicio | fecha fin | precio |
| A | 2 | papa | 01/01/01 | 05/01/01 | 3 |
| A | 2 | papa | 03/01/01 | 08/01/01 | 2,5 |
bueno, necesito un script sql que me permita detectar estas inconsistencias. o sea, tendría que buscar y acomodar los datos, de forma que pueda comparar los períodos que se superponen. la salida debería ser los registros que son inconsistentes.
logré hacerlo en smalltalk (casi una papa diría), pero el problema que tenemos es que debemos ejecutarlo sobre una base con miles de productos, donde las columnas a comparar no son categoría, proveedor y nombre, sino que son 5 más, y tiene que evaluar todo un año para detectar inconsistencias viejas.
si puedo lograr que el motor de base de datos resuelva el problema, seguro lo hace mucho más rápido.
bueno, les dejo la inquietud. gracias de antemano, salu2.