Autor Tema: Obtener ultimo precio del ultimo id ingresado - Acess  (Leído 3474 veces)

0 Usuarios y 1 Visitante están viendo este tema.

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Obtener ultimo precio del ultimo id ingresado - Acess
« en: Marzo 03, 2015, 04:35:35 pm »
Quiero obtener el ultimo registro ingresado en mi tabla correspodiente a determinado id_prod
El campo id_stock es autonumerico



Código: (VB) [Seleccionar]
SELECT MAX(id_stock) AS ID, precio_compra
FROM stock
WHERE id_prod='0011'
GROUP BY precio_compra;

La consulta anterior me arroja 3 resultados dado que el precio compra es diferente en ciertos casos.

000435 8.50
000685 3.00
001170 7.00

lo que necesito obtener el 7.00 osea el que corresponde al ultimo id ingresado.
« última modificación: Marzo 03, 2015, 04:45:20 pm por lucius »

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #1 en: Marzo 03, 2015, 06:54:54 pm »
Hola.
¿No te conviene agrupar por id_prod?
Código: (VB) [Seleccionar]
SELECT MAX(id_stock) AS ID, precio_compra
FROM stock
WHERE id_prod='0011'
GROUP BY id_prod;
Saludos.

Jerónimo

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #2 en: Marzo 04, 2015, 06:17:12 pm »
Hola Jeronimo que problema se presentaria agrupar por id?
Utilizar la clausula TOP es una solucion(No tengo idea si sea lo correcto) pero siempre y cuando se quiera buscar el ultimo precio de un determinado articulo.
Código: (VB) [Seleccionar]
SELECT TOP 1 id_prod,precio_compra
FROM stock
WHERE id_prod='0054'
ORDER BY id_stock DESC;

Que pasa si quiero saber el ultimo precio de todos los producto, que tendria que hacer?, apelo a sus criterios si es correcto hacer esto o buscar otras opciones.

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #3 en: Marzo 04, 2015, 10:58:59 pm »
Según planteás, id_stock es autonumérico, con lo cual, al agruparse por ese campo, no habría nada para agrupar (corríjanme los que realmente saben de bases de datos si estoy equivocado, por favor). Lo que quiero decir es que el agrupamiento toma a todos los registros que tengan el mismo valor en el campo por el que se quiere agrupar. Si ese campo es autonumérico, no habrá al menos dos registros con el mismo valor.
En cambio, al agrupar por id_prod se van a tomar todos los registros con el mismo valor en ese campo y se van a agrupar. Luego, de cada grupo se tomará el mayor valor de id_stock y el valor de precio_compra.
No sé si me explico bien. Ojalá venga alguno de los gurús de bases de datos a traer algo de luz.
Saludos.

Jerónimo


YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #4 en: Marzo 05, 2015, 01:55:21 am »
Hola Lucius. Tu preguntas:
Quiero obtener el ultimo registro ingresado en mi tabla correspodiente a determinado id_prod

¿Que es "ultimo"? ¿te refieres "a lo registrado" o a cronología?. Si es a cronología tienes que conjugar también con el campo fecha, si es al ultimo grabado tienes que buscar el id mas alto correspondiente. Lo que pasa es que muchas veces no nos sirve el ultimo registrado porque funcionalmente a veces los usuarios no registran en orden. Alguien registra con fecha 10/03 y chapa el id 666 y después de eso registra con fecha 05/03 en el id 669... ¿cual es el ultimo?, ojo con eso.

Aplicas Group By por uno de los campos del Select, en este caso mi amigo Jeronimo agrupo por id_prod cuando ese campo no esta en el Select, es un pequeño lapsus que se resuelve agregando ese campo en el select, pero luego no es necesario agrupar si ya excluiste a todos, es decir en el where forzamos a buscar a un id_prod especifico y por ello el Group By en este escenario no es recomendable, a cambio de ello es mejor usar Top 1.

En ese caso tu ultimo query en el que usas Top 1 con un ORDER BY DESC es el correcto, aunque en lo personal yo no confiaría en el resultado por lo que expuse arriba.

Ahora tu preguntas:
Que pasa si quiero saber el ultimo precio de todos los producto, que tendría que hacer?,....

En ese caso, si te sirve el código de Jeronimo (el del Group By) con el detalle de que debemos quitar el WHERE id_prod='0011', es decir, no debes hacer distinción del Id_Prod ya que el código agrupara por Id_Prod y nos dara el Max de Id_Stock.

Aclaro, estos códigos se ejecutaran sin errores como tal, pero funcionalmente hay una buena posibilidad de que la realidad lo invalide, SALVO QUE hallas hecho todas las validaciones previas en el momento de registro, sin contar que al parecer consultas a una tabla transaccional que siempre crecerá y por tanto la consulta con el tiempo se irá haciendo ineficiente. Yo te recomendaría que tengas en alguna tabla un campo con el "UltimoPrecio" y cada vez que haces una inserción la actualizas a ella, luego la consulta contra esa tabla sera super veloz.

Sino la chunte, igual seguiré también esperando al guru  :) :) :)

Saludos
« última modificación: Marzo 05, 2015, 01:58:21 am por YAcosta »
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #5 en: Marzo 05, 2015, 09:30:23 am »
jajaja ¡No sé en qué estaba pensando!
Cierto, amigo Yván. No tiene ningún sentido lo que sugerí.
Concretamente, la consulta de Lucius es:
Citar
Quiero obtener el ultimo registro ingresado en mi tabla correspondiente a determinado id_prod
Allí tenés toda la razón en que solamente hay que filtrar por id_prod y obtener el id_stock más alto (con top, con max, o como fuere en cada gestor). ¡No tiene sentido agrupar!
Perdón, Lucius, se me escapó.

¿Que es "ultimo"? ¿te refieres "a lo registrado" o a cronología?. Si es a cronología tienes que conjugar también con el campo fecha, si es al ultimo grabado tienes que buscar el id mas alto correspondiente. Lo que pasa es que muchas veces no nos sirve el ultimo registrado porque funcionalmente a veces los usuarios no registran en orden. Alguien registra con fecha 10/03 y chapa el id 666 y después de eso registra con fecha 05/03 en el id 669... ¿cual es el ultimo?, ojo con eso.
Excelente observación.
Sabía que llegaría el gurú ;)
Saludos.

Jerónimo


« última modificación: Marzo 05, 2015, 09:34:17 am por Jeronimo »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #6 en: Marzo 05, 2015, 02:11:38 pm »
Solo una pequeñita observación estimado:
...que solamente hay que filtrar por id_prod y obtener el id_stock más alto (con top, con max, o como fuere en cada gestor).
Top y Max están en todos los gestores (aunque explicitamente no se si debemos decir gestor o motor), bueno en Firebird en vez de llamarse Top se llama First pero hace exactamente lo mismo, la diferencia es que Top es una clausula y Max es una función, Top no usa Group By y la aplica a toda la sabana del select, Max puede usar Group By cuando queremos aplicar resultados por grupo indicado. Alli la dejo pa' no caer espeso

 ;D ;D ;D

Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #7 en: Marzo 05, 2015, 02:47:46 pm »
Muchas gracias por la aclaración.
Qué bueno es aprender algo todos los días.

Jerónimo

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #8 en: Marzo 07, 2015, 02:06:44 am »
Solo queda decir gracias por el soporte, saludos

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #9 en: Marzo 08, 2015, 07:09:46 pm »
Hola yacosta, jeronimo tengo todas sus sugerencias en cuenta.

Bueno no he podido obtener el ultimo precio compra de todos los productos si lo hago como dijo jeronimo solo obtengo idprod pero si agrego el precio_compra tengo el problema que mencione al comienzo osea me arroja tres resultados(dependiendo si hay preciocompras distintos) de un mismo producto,  a estas alturas ya se me bloqueo el brain.

Dejo mi bd y asi se animan a darme soporte, http://www.mediafire.com/download/aa2g6ge02u4de43/080808.accdb

 saludos

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #10 en: Marzo 08, 2015, 10:30:04 pm »
Bueno hoy tengo prohibido programar los domingos, aprovecho en escribir ya que mi esposa salio a comprar unos panes asi que mañana lunes lo veo.  :-)  salvo que el amigo Jeronimo se adelante.

P.D: Nada importante, pero seria bueno que no uses la palabra "soporte", esto no es "soporte" porque el soporte implica una obligación de resolver problemas previamente contratado por un cliente y tu no eres cliente, esto es ayuda, "colaboración entre amigos" si quieres. Lo digo en tono amiguero,  soporte me hace sentir que trabajo :-), no es importante pero es bueno llamar a lo que es por su nombre.

Abrazos
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #11 en: Marzo 09, 2015, 12:56:59 am »
Coincido en ambos puntos referidos por Yván. Pero en cuanto al primero, a veces, si por algo no puedo conciliar el sueño, aprovecho la calma de la noche para relajarme y entrar en este café ;)

Lucius: probá de la siguiente manera.

Código: (SQL) [Seleccionar]
SELECT TOP 1 *
FROM stock
WHERE id_prod='0011' ORDER BY id_stock DESC

Puse "*", aunque en general no es recomendable, para que verifiques todos los campos que trae y veas si es lo que necesitás. Luego, en caso afirmativo, reemplazalo por los campos que quieras recuperar. Por ejemplo:
Código: (SQL) [Seleccionar]
SELECT TOP 1 id_stock AS id, precio_compra
FROM stock
WHERE id_prod='0011' ORDER BY id_stock DESC
Espero que esta vez sirva mi intervención  :-\

Jerónimo
« última modificación: Marzo 09, 2015, 12:59:19 am por Jeronimo »

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #12 en: Marzo 09, 2015, 11:01:12 am »
Hola, utilizando nose si sea clausula o sentencia top obtengo lo que necesito sin embargo necesito obtener los ultimoa precios de todos los productos. La bd esta diseñada asi aunque estos datos que busco deberian estar en otra tabla como menciono yacosta lo cual tengo en cuenta sin embargo necesito esa info ahora, espwro encontrar la solucion por que estoy por tirar la toalla.

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #13 en: Marzo 10, 2015, 09:46:42 pm »
Hola a todos, bueno gracias a Jeronimo, Yacosta y la ayuda de otro gran maestro se soluciono mi problema, muchas gracias por el tiempo brindado, saludos
Código: (VB) [Seleccionar]

SELECT t1.id_stock, t1.id_prod, t1.fechacompra,t1.precio_compra
FROM
STOCK AS t1
LEFT JOIN
(SELECT MAX(id_stock) AS stk, id_prod FROM stock GROUP BY id_prod)  AS t2
ON (t1.id_stock=t2.stk) AND (t1.id_prod=t2.id_prod)
WHERE t2.stk IS NOT NULL


Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Obtener ultimo precio del ultimo id ingresado - Acess
« Respuesta #14 en: Marzo 13, 2015, 10:33:45 am »
Flor de consulta!  :D