2 messages in com.mysql.lists.mysql-esRe: Eliminar registros dobles
FromSent OnAttachments
Vicente Lopez07 Apr 2007 14:34 
Erick Carballo08 Apr 2007 12:26 
Subject:Re: Eliminar registros dobles
From:Erick Carballo (carb@indiana.edu)
Date:04/08/2007 12:26:34 PM
List:com.mysql.lists.mysql-es

Estimado Vicente, esta "solución" asume tres cosas:

1- que estás utilizando una versión de MySQL que te permite hacer "subqueries". 2- que el valor "id" está en *estricto* orden numérico. 3- que la tabla en cuestión se llama "tbl"

Primero lo que no funcionó ya que eso me ayudó a llegar a la solución. La siguiente query, *casi* funciona:

SELECT current.id, current.value, current.time FROM tbl as current, tbl as next WHERE current.id = (next.id + 1) AND current.value <> next.value

+----+-------+--------------+ | id | value | time | +----+-------+--------------+ | 3 | 14 | 200704042125 | | 5 | 17 | 200704042140 | | 6 | 14 | 200704042143 | | 7 | 20 | 200704042145 | +----+-------+--------------+

Como podés ver, con excepción del primer record, te da los resultados que querés.

Modificando los valores obtuve esta otra que te da los resultados no deseados:

SELECT current.id, current.value, current.time FROM tbl as current, tbl as next WHERE (current.id - 1) = next.id AND current.value = next.value

+----+-------+--------------+ | id | value | time | +----+-------+--------------+ | 2 | 12 | 200704042120 | | 4 | 14 | 200704042131 | | 8 | 20 | 200704042148 | +----+-------+--------------+

Entonces lo que hice fue poner la segunda en una subquery:

SELECT id, value, time FROM tbl WHERE id NOT IN (SELECT current.id FROM tbl as current, tbl as next WHERE (current.id - 1) = next.id AND current.value = next.value)

+----+-------+--------------+ | id | value | time | +----+-------+--------------+ | 1 | 12 | 200704042112 | | 3 | 14 | 200704042125 | | 5 | 17 | 200704042140 | | 6 | 14 | 200704042143 | | 7 | 20 | 200704042145 | +----+-------+--------------+

Espero que esto te sea de utilidad

Con buenos deseos

Erick

At 11:35 PM +0200 4/7/07, Vicente Lopez wrote:

A las buenas noches.

Vereis, tengo un sistema que me deja en una tabla registros de estado del modo siguiente:

id value time 1 12 200704042112 2 12 200704042120 3 14 200704042125 4 14 200704042131 5 17 200704042140 6 14 200704042143 7 20 200704042145 8 20 200704042148

Me gustaria poder eliminar los registros de transito es decir dejar solo los registros en los que hay un cambio en el valor del campo 'value'.

Lo mas facil seria eliminar los registros que tienen el mismo valor que su inmediato antecesor.

O lo que es lo mismo necesito hacer una consulta que saque el siguiente resultado:

id value time 1 12 200704042112 3 14 200704042125 5 17 200704042140 6 14 200704042143 7 20 200704042145

De momento no he conseguido hacerlo posible, espero ideas.

Muchas gracias anticipadas.

Vicente.