Actualizar el segundo monto de la fila con el id basado en el primer id.
Mis datos originales son los siguientes:
sid id cantidad
1 12 30
2 45 30
3 45 50
4 78 80
5 78 70
El resultado deseado es el siguiente:
sid id cantidad
1 12 30
2 45 30
3 45 30
4 78 80
5 78 80
La intención es tomar la cantidad donde aparece el id por primera vez y actualizar la cantidad la segunda vez que aparece.
Estoy intentando el siguiente código:
ACTUALIZAR foo AS f1
UNIR
( SELECCIONAR cur.sid, cur.id,
cur.cantidad AS balance
DESDE foo AS cur
UNIR foo AS prev
EN prev.id = cur.id
AGRUPAR POR cur.tstamp
) AS p
EN p.id = a.id
ESTABLECER a.cantidad = p.cantidad ;
davy.ai
Hay algunos problemas con el código proporcionado que deben abordarse para lograr el resultado deseado. Aquí van algunas sugerencias:
La cláusula GROUP BY en la subconsulta está agrupando por la columna incorrecta. En lugar de agrupar por “cur.tstamp”, debería agrupar por “cur.id” para asegurarse de que solo se seleccione la primera aparición de cada id.
La subconsulta está seleccionando la columna “balance” en lugar de “amount”. Cambia “cur.amount AS balance” por “cur.amount AS amount” para que coincida con el nombre original de la columna.
La cláusula ON en la instrucción JOIN está haciendo referencia a “a.id”, que no está definida. Cámbiala por “f1.id” para hacer referencia a la columna id en la tabla principal.
Con estos cambios, el código actualizado debería lucir así:
UPDATE table_name AS t1
JOIN
( SELECT cur.sid, cur.id,
cur.amount AS amount
FROM table_name AS cur
JOIN table_name AS prev
ON prev.id = cur.id
GROUP BY cur.id
) AS t2
ON t2.id = t1.id
SET t1.amount = t2.amount ;
Esto debería actualizar la columna de monto en la tabla principal para que coincida con la primera aparición de cada id.