Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Update Valor en Tabla con el Valor mas reciente de Otra

Estas en el tema de Update Valor en Tabla con el Valor mas reciente de Otra en el foro de SQL Server en Foros del Web. Hola Amigos, Estoy realizando un query para actualizar los porcentajes de utilidad de una serie de productos (seleccionados por instancia) en el sistema administrativo SAINT ...
  #1 (permalink)  
Antiguo 13/07/2012, 08:49
 
Fecha de Ingreso: julio-2012
Mensajes: 3
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Update Valor en Tabla con el Valor mas reciente de Otra

Hola Amigos,

Estoy realizando un query para actualizar los porcentajes de utilidad de una serie de productos (seleccionados por instancia) en el sistema administrativo SAINT ENTERPRISE, para hacer esto debo realizar un inner join entre 2 tablas (SAPRIM y SAPROD) ya que los valores de las instancias pertenecen a SAPROD.

Todo iba bien hasta que me di cuenta en en la Tabla SAPRIM los codigos de los productos aparecen tantas veces como se haya importado el producto... esto es con fines de calculos de costos promedios y otras cosas.

El caso es que el query funciona, solo que al ejecutarse este toma para cada producto el costo mas antiguo de la tabla, porlo que me hace el ajuste de utilidad considerando este valor ya Obsoleto..

La pregunta es como hago para que el query considere el ultimo costo (fecha mas reciente) para cada codigo de producto?????

Se me ocurrio algo como esto pero me da errores:

ORDER BY [SAINTDB-INTERFAZ].[dbo].SAPRIM.FechaE DESC


Aqui el Query que funciona pero me toma el ultimo valor:
---------------------------------------------------------------------------------------------
UPDATE [SAINTDB-INTERFAZ].[dbo].[SAPRIM]
SET Precio1 = [SAINTDB-INTERFAZ].[dbo].SAPRIM.CostAct / 0.80, Precio2 = [SAINTDB-INTERFAZ].[dbo].SAPRIM.CostAct / 0.75, Precio3 = [SAINTDB-INTERFAZ].[dbo].SAPRIM.CostAct / 0.50
FROM [SAINTDB-INTERFAZ].[dbo].SAPROD INNER JOIN
[SAINTDB-INTERFAZ].[dbo].SAPRIM ON [SAINTDB-INTERFAZ].[dbo].SAPROD.CodProd = [SAINTDB-INTERFAZ].[dbo].SAPRIM.CodProd
WHERE ([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 9) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 13) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 14) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 15) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 16) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 17) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 21) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 22) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 23) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 24) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 25) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 26) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 27) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 28) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 29) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 30) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 31) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 33) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 34) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 35)

-----------------------------------------------------------------------------------------------------------
  #2 (permalink)  
Antiguo 13/07/2012, 09:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

y si pones en tu where and fecha=(select max(fecha) from tabla_productos where codigo producto=codigoproducto de tu query)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 13/07/2012, 10:06
 
Fecha de Ingreso: julio-2012
Mensajes: 3
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

ummmm, Gracias.
Creo que la respuesta esta en ese comando, el caso es que el WHERE no puedo especificar el producto, en tal caso no seria la tabla? SAPRIM?
porque la lista es de 8.000 productos... algo asi:

SELECT MAX(FechaE) FROM [SAINTDB-INTERFAZ].[dbo].[SAPRIM]
WHERE ([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 9) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 13) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 14) OR
([SAINTDB-INTERFAZ].[dbo].SAPROD.CodInst = 15) OR.......
  #4 (permalink)  
Antiguo 13/07/2012, 10:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

pues eso tu lo sabes, yo nada mas veo un query y preguntas como sacar el ultimo valor de otra tabla eso se hace un un max, ya depende de ti adecuarlo a tus necesidades :), no se que datos tengas en tus tablas ni nada de eso.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/07/2012, 11:53
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

Mi estimado amigo Libras, veo que ha ido perdiendo sus dotes de "adivino", jajajaja (saludos)
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 13/07/2012, 12:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

Cita:
Iniciado por iislas Ver Mensaje
Mi estimado amigo Libras, veo que ha ido perdiendo sus dotes de "adivino", jajajaja (saludos)
No me podian durar para siempre los poderes adivinatorios amigo :(
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 15/07/2012, 02:58
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

No entiendo para que se sirve la tabla SAPROD
si actualizas SAPRIM con valores de SAPRIM.

Sin embargo- quieres actualizar las filas de SAPRIM con los valores de la ultima fecha de SAPRIM o con los valores de la ultima fecha en SAPROD?

Existe una solución tecnica para este problema, pero no estoy seguro que lo entendi.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #8 (permalink)  
Antiguo 16/07/2012, 05:47
 
Fecha de Ingreso: julio-2012
Mensajes: 3
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

gerireshef,
Necesito actualizar los valores mas recientes de SAPRIM.
La asociación con SAPROD se debe a que ella contiene grupos de productos (llamados instancias). Las que ves en el query corresponden a los diferentes grupos de productos importados, todas las otras instancias son de productos nacionales a los cuales no tengo que aplicar este Query.
Me explico?
Gracias por tu ayuda.
  #9 (permalink)  
Antiguo 16/07/2012, 08:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

un ejemplo de tus datos que tienes y que quieres obtener serviria para ayudarte mejor.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 16/07/2012, 22:38
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Update Valor en Tabla con el Valor mas reciente de Otra

Espero que te entendi y que el siguiente ejemplo te ayude:

With Sprm As
(Select Row_Number() Over(Partition By CodProd Order By MiFecha Desc) Nm,
*
From [SAINTDB-INTERFAZ].[dbo].SAPRIM)
Update Sprm
Set Precio1 = Sprm.CostAct / 0.80,
Precio2 = Sprm.CostAct / 0.75,
Precio3 = Sprm.CostAct / 0.50
From [SAINTDB-INTERFAZ].[dbo].SAPROD Sprd
Inner Join Sprm
On Sprd.CodProd = Sprm.CodProd
Where Sprd.CodInst In (9,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31 ,33,34,35)
And Sprd.Nm=1;

Lo que entendi es:
1. Se debe actualizar la tabla SAPRIM.
2. Se debe actualizar solamente "los valores mas recientes", que supongo que son las filas con la fecha (=MiFecha) mas grande en cada producto (=CodProd).
3. Cada fila se actualizan con sus valores (y no con valores de otras filas de la tabla).
4. El Join con SAPROD se sirve solamente para filtrar las filas de SAPRIM.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Etiquetas: query, update, order-by
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:02.