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

Consulta sql de precio minimo por referencia

Estas en el tema de Consulta sql de precio minimo por referencia en el foro de Bases de Datos General en Foros del Web. Hola! Tengo una duda a la hora de hacer una consulta sql, a ver si me sé explicar. La cosa es que tengo dos tablas, ...
  #1 (permalink)  
Antiguo 09/02/2016, 12:29
 
Fecha de Ingreso: diciembre-2010
Mensajes: 8
Antigüedad: 13 años, 4 meses
Puntos: 0
Consulta sql de precio minimo por referencia

Hola! Tengo una duda a la hora de hacer una consulta sql, a ver si me sé explicar.
La cosa es que tengo dos tablas, una artículos y otra rastreos. En artículos tengo los siguientes datos:

id | referencia | tienda | marca | precio | id_rastreo

1 123 ebay lg 200 1
2 123 ebay nokia 180 1
3 111 ebay lg 150 1
4 111 ebay nokia 140 1
5 123 amazon nokia 185 1
6 123 amazon lg 170 1
7 111 amazon nokia 135 1
8 123 ebay lg 210 2
9 123 ebay nokia 170 2
10 111 ebay lg 150 2
11 111 ebay nokia 160 2
12 123 amazon nokia 175 2
13 123 amazon lg 150 2
14 111 amazon nokia 195 2

En la tabla rastreo tengo lo siguiente:

id_rastreo | fecha
1 08/02/2016
2 09/02/2016


Quiero una consulta que me saque el precio mínimo de los artículos por referencia en cada fecha. Para que os hagáis una idea, con los datos que e puesto me tendría que salir por pantalla lo siguiente:

REFERENCIA | PRECIO_MIN_EBAY/MARCA | PRECIO_MIN_AMAZON/MARCA | FECHA

123 180 /nokia 170/lg 08/02/2016
111 140/nokia 135/nokia 08/02/2016
123 170/nokia 150/lg 09/02/2013
111 150/lg 195/nokia 09/02/2016


Resumiendo, para el día 08/02/2016 el producto más barato para la referencia 123 fue un nokia con valor de 180 euros en ebay, y en amazon fue un lg de 170 euros.

No sé si me he explicado bien. A ver si alguien me puede ayudar con esta consulta que no hay forma de sacarla.

Gracias de antemano.
  #2 (permalink)  
Antiguo 09/02/2016, 12:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta sql de precio minimo por referencia

seria algo como esto:

Código SQL:
Ver original
  1. SELECT MIN(precio), tienda, marca FROM(
  2. SELECT * FROM articulos AS t1
  3. LEFT JOIN rastreo AS t2 ON (t1.id_rastreo=t2.id_rastreo)
  4. ) AS completa
  5. GROUP BY tienda, marca

que manejador de bases de datos usas? porque la consulta que te pongo es para SQL Server
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 09/02/2016, 13:07
 
Fecha de Ingreso: diciembre-2010
Mensajes: 8
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Consulta sql de precio minimo por referencia

Muchas gracias por responder, ahora la probare. Utilizo mysql server. Es para una consulta en php que tengo que hacer.
  #4 (permalink)  
Antiguo 09/02/2016, 14:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta sql de precio minimo por referencia

PHP no hace consultas. Las envía a una base de datos para ejecución y obtiene las respuestas.
En todo caso, la base puede ser SQL Server, MySQL, PostgreSQL, Oracle... etc.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/02/2016, 11:26
 
Fecha de Ingreso: diciembre-2010
Mensajes: 8
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Consulta sql de precio minimo por referencia

No hay forma de conseguir que salga bien. Sale todo bien menos la marca, que me sale la primera marca que encuentra en vez de la marca que tenga el precio mas bajo. La consulta sql que he puesto es esta, a ver si veis que le pasa:
Código SQL:
Ver original
  1. SELECT r.fecha_rastreo , MIN(p0.precio) AS 'precio_comp0', p0.nombre_producto AS 'marca0' , p0.referencia
  2. FROM datos_rastreo AS p0 JOIN rastreo AS r ON p0.id_rastreo=r.id_rastreo
  3. WHERE p0.tienda='ebay'
  4. GROUP BY referencia, fecha_rastreo
  5. ORDER BY fecha_rastreo ASC

Última edición por gnzsoloyo; 11/02/2016 a las 11:34
  #6 (permalink)  
Antiguo 11/02/2016, 11:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta sql de precio minimo por referencia

Cita:
me sale la primera marca que encuentra en vez de la marca que tenga el precio mas bajo
Es absolutamente natural... Por lo que veo, estás usando MySQL (asumo eso), y no conoces el funcionamiento de su lógica.
Este tema se ha tratado INFINIDAD de veces, y SIEMPRE damos la misma explicación...
El problema del GROUP BY es precisamente que usa el primer valor encontrado para ese o esos campos, y "esconde" los restantes resultados.
Si quieres algo que esté ordenado y agrupado, debes ordenar primero, y agrupar después. Adicionalmente, no estás ordenando en base a todos los criterios necesarios.
Código SQL:
Ver original
  1. SELECT fecha_rastreo, precio_comp0, marca0, referencia
  2. FROM
  3.     (SELECT
  4.        r.fecha_rastreo,
  5.        p0.precio precio_comp0,
  6.        p0.nombre_producto marca0,
  7.        p0.referencia
  8.     FROM datos_rastreo p0 INNER JOIN rastreo r ON p0.id_rastreo=r.id_rastreo
  9.     WHERE p0.tienda='ebay'
  10.     ORDER BY p0.precio DESC,  p0.nombre_producto ASC, fecha_rastreo ASC) Tabla1
  11. GROUP BY referencia, fecha_rastreo

Por cierto, los AS son innecesarios.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: precio, referencia, sql, tabla
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 10:27.