2 messages in com.mysql.lists.mysql-esRe: Eliminar registros dobles| From | Sent On | Attachments |
|---|---|---|
| Vicente Lopez | 07 Apr 2007 14:34 | |
| Erick Carballo | 08 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.
-- Lista de Correos de MySQL Para el historial de la lista: http://lists.mysql.com/mysql-es Para cancelar inscripción: http://lists.mysql.com/mysql-es?unsub=carb...@indiana.edu




