es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 ;
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código proporcionado que deben abordarse para lograr el resultado deseado. Aquí van algunas sugerencias:

    1. Los nombres de tabla y columna en el código no coinciden con los datos originales, lo que podría causar errores de sintaxis. Asegúrate de reemplazar “foo” con el nombre real de la tabla y “tstamp” con “sid” o “id” dependiendo de qué columna se esté utilizando como identificador único.
    2. 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.

    3. 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.

    4. 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.

Comments are closed.