Tengo una tabla SQLite llamado precio de esta manera:alias SQLite del nombre de la tabla en la instrucción UPDATE
date, productId, price
----------------------
20120601, 10 , 10.1
20120601, 20 , 20.1
20120602, 10 , 0
20120602, 20 , 0
20120602, 30 , 0
La tabla se crea con esta declaración:
CREATE TABLE "Price" ("date" INTEGER NOT NULL , "productId" INTEGER NOT NULL , "price" DOUBLE, PRIMARY KEY ("date", "productId"))
Quiero llenar el precio de fecha == 20120602 con el precio del mismo producto en la fecha anterior.
es decir Quiero el turno tabla en la siguiente manera:
date, productId, price
----------------------
20120601, 10 , 10.1
20120601, 20 , 20.1
20120602, 10 , 10.1
20120602, 20 , 20.1
20120602, 30 , 0
así que he intentado esta sentencia SQL:
UPDATE Price New SET New.price =
(SELECT old.price FROM Price Old WHERE New.date == 2 AND Old.date == 1 AND New.productId == Old.productId)
Pero SQLite me dio un error cerca de puntos.
De lo que probé esta declaración:
UPDATE New Set New.Price = Old.Price
FROM Price New, Price Old
WHRER ......
SQLite me dio un error cerca de DE.
Comprobé dos veces la sintaxis SQL de SQLite pero no encontré ninguna suerte. Aunque nunca lo intenté, creo que ambas declaraciones funcionarían como se esperaba en MS SQL Server. La primera instrucción podría funcionar si New y Old son tablas demasiado diferentes, pero las necesito en la misma tabla.
Realmente no quiero escribir un bucle para actualizar una vez una línea en mi código C++, necesito consejos sobre la forma correcta de lograr esto en SQLite.
Gracias.
Probé su solución, no hay error de sintaxis más, pero los valores no se cambian. ¿Podrías por favor ser más preciso en la declaración sql que debería usar? Gracias. –
Y si cambio la columna Precio para permitir NULL, cada precio se establecerá en NULL después de ejecutar 'UPDATE Price SET price = (SELECCIONAR old.price FROM Price Old DONDE price.date == 2 AND Old.date == 1 AND price.productId == Old.productId) ', se pierden todos los datos ...... –
¿Qué sentido tiene poner' price.date == 2' en una subconsulta ya que no está relacionado con la tabla 'old' ? Moverlo fuera de la subconsulta. –