MySQL - Duda consulta registros repetidos

 
Vista:

Duda consulta registros repetidos

Publicado por Boris (3 intervenciones) el 26/04/2008 18:22:48
Buenos días, soy nuevo en MYSQL y me gustaría un poco de ayuda en lo siguiente.
Tengo una tabla como la siguiente:

PEDIDO FECHA CREACION ESTADO FECHA ACTUALIZACION
111 20/04/2008 abierto 20/04/2008
112 20/04/2008 abierto 20/04/2008
111 20/04/2008 cerrado 21/04/2008
113 20/04/2008 abierto 20/04/2008
114 20/04/2008 abierto 20/04/2008
112 20/04/2008 cerrado 21/04/2008

Como se darán cuenta, hay registros repetidos, el número de pedido siempre es el mismo, pero cambia el estado y la fecha de actualización de un registro a otro (mira el 111 y el 112).
Todos los días cargo la tabla con pedidos nuevos o repetidos.
Necesito una consulta que me calcule cuanto se demoran en promedio los pedidos en pasar de estado abierto a cerrado
Se me ocurre crear una tabla temporal con los de estado cerrado, hacer un join con la tabla original comparando el número de pedido. Asi obtendría pares de registros para todas las coincidencias. Luego compararía las dos fechas y sacaría un promedio.
Por favor si alguien me puede ayudar con el código, se lo agradeceré
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Duda consulta registros repetidos

Publicado por Gonzalo GC (339 intervenciones) el 28/04/2008 04:43:33
Si se te están repitiendo filas en la tabla, puede ser:
1. El modelo de datos está mal diseñado. Simplemente la duplicación no debe ocurrir jamás en un sistema relacional.
2. No tienes definidas las restricciones debidas en las tablas.
3. No estás definiendo índices que te puedan ayudar a controlar la consistencia de datos.
4. La aplicación que carga los datos no tiene método de validación para saber si el registro entrante es nuevo o actualización. Eso es un error de diseño de procesos.

La cosa no se soluciona con consultas, porque el problema se repetirá. Tienes que replantear el modelo desde el inicio y ver dónde está fallando. La información jamás debe repetirse. Si se repite, en alguna parte hay un erro de diseño.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda consulta registros repetidos

Publicado por Boris (3 intervenciones) el 28/04/2008 12:15:55
Hola, gracias por responder
Los registros se repiten a drede. Porque se actualizan a diario, es decir, los pedidos cambian su estado. Te explico: el registro A, que tiene consecutivo 1 se ingresa a la tabla el dia 20/04/2008 en estado X. El mismo registro A, pero ahora con consecutivo 2, se ingresa otra vez el día 21/04/08 con estado Y.
De pronto no me expliqué bien. El query debe arrojar cuales son los registros que han cambiado de estado y decir cuanto tiempo se demoró en pasar del estado abierto a cerrado, que es el que me interesa. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda consulta registros repetidos

Publicado por Gonzalo GC (339 intervenciones) el 28/04/2008 20:58:14
Entonces el problema es que la tabla simplemente no está normalizada y está repitiendo información que no debe repetirse.
Me explico un poco mejor:
Lo que necesitas es separa la info del estado de transacción, del registro de la misma.
Si el ejemplo fuese una tabla de pedidos, tendrías una tabla PEDIDOS() con los detalles generales de pedidos (ID_PEDIDO, DETALLE, FECHAINI, IDCLIENTE) y otra tabla ESTADOPEDIDOS con los campos ID_PEDIDO, FECHA_ACTUALIZACION, ESTADO, DETALLETRABAJO).
De la primera tendrías siempre un registro por pedido; de la segunda, Uno por estado o actualizacion de info.
Saber cuál es el último estado ingresado sería simplemente hacer un
SELECT MAX(FECHA_ACTUALIZACION) FROM PEDIDOS INNER JOIN ESTADOPEDIDOS USING(ID_PEDIDO) WHERE PEDIDO = variable;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar