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

seleccionar agrupando por id y precio mas bajo y stock mas alto

Estas en el tema de seleccionar agrupando por id y precio mas bajo y stock mas alto en el foro de Bases de Datos General en Foros del Web. Hola, aqui estoy con otra consulta de estas raras. Varios proveedores pasan sus listados de precios y stock diariamente y actualmente los comparo uno a ...
  #1 (permalink)  
Antiguo 02/02/2011, 04:45
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
seleccionar agrupando por id y precio mas bajo y stock mas alto

Hola, aqui estoy con otra consulta de estas raras.

Varios proveedores pasan sus listados de precios y stock diariamente y actualmente los comparo uno a uno con visual, pero este proceso lleva demasiado tiempo, habia alguna forma de compararlo con sql.

Ejemplo
Tabla general [TARIFAS]
campos:
id
id_proveedor
producto
precio
stock

imaginamos que un producto lo tienen 5 proveedores, con sus precios y stock
ID | id_proveedor | producto | precio | stcok
12547| 00 |tubo pvc 100 metros| 56 | 30
12547| 01 |tubo pvc 100 metros| 60 | 4
12547| 02 |tubo pvc 100 metros| 50 | 0
12547| 03 |tubo pvc 100 metros| 55 | 7
12547| 04 |tubo pvc 100 metros| 53 | 2


el resultado de la consulta deveria ser esto proveedor 04 ya que tiene el precio mas bajo con stock del mismo.
12547| 04 |tubo pvc 100 metros| 53 | 2


Podrian ayudarme con el sql

mil gracias
  #2 (permalink)  
Antiguo 02/02/2011, 05:32
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

Una que es poco eficiente pero te valdría es:

SELECT * FROM TABLA
WHERE STOCK > 0
AND PRECIO = (SELECT MIN(PRECIO) FROM TABLA WHERE STOCK > 0)

Aunque seguro que se puede hacer de otra forma más eficiente esa manera funciona
  #3 (permalink)  
Antiguo 02/02/2011, 05:44
 
Fecha de Ingreso: enero-2011
Ubicación: Castellon
Mensajes: 39
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

No quiero meter la pata pero en la consulta de Heimish200 no incluye que tengan el stock más alto

SELECT * FROM TABLA
WHERE PRECIO = (SELECT MIN(PRECIO) FROM TABLA WHERE STOCK > 0)
ORDER BY STOCK desc

Así te mostraria por orden de stock más alto aquellos que tienen el precio más bajo y si solo quieres ver el que tenga más alto de todos:

SELECT * FROM TABLA
WHERE STOCK = (SELECT MAX(STOCK) FROM TABLA)
AND PRECIO = (SELECT MIN(PRECIO) FROM TABLA)

Incluso puedes hacer
SELECT MAX(STOCK) FROM TABLA
WHERE PRECIO = (SELECT MIN(PRECIO) FROM TABLA)
  #4 (permalink)  
Antiguo 02/02/2011, 05:52
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

Cita:
Iniciado por Orantx Ver Mensaje
No quiero meter la pata pero en la consulta de Heimish200 no incluye que tengan el stock más alto

SELECT * FROM TABLA
WHERE PRECIO = (SELECT MIN(PRECIO) FROM TABLA WHERE STOCK > 0)
ORDER BY STOCK desc

Así te mostraria por orden de stock más alto aquellos que tienen el precio más bajo y si solo quieres ver el que tenga más alto de todos:

SELECT * FROM TABLA
WHERE STOCK = (SELECT MAX(STOCK) FROM TABLA)
AND PRECIO = (SELECT MIN(PRECIO) FROM TABLA)

Incluso puedes hacer
SELECT MAX(STOCK) FROM TABLA
WHERE PRECIO = (SELECT MIN(PRECIO) FROM TABLA)
Yo por el ejemplo que ha puesto creo que busca que tenga stock, no que este sea el más alto, aunque me puedo equivocar

En el ejemplo que puso, tu consulta no devolvería nada ya que el stock más alto es 30 y el precio minimo es 50, pero no hay ningún registro que cumpla las dos condiciones a la vez. En cambio, yeyowave dice que tiene que devolver el proovedor 04.
  #5 (permalink)  
Antiguo 02/02/2011, 06:07
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

no, creo que no me habeis entendido, se trata de agruparlos por id de producto

Busco algo asi de los productos duplicados que hay seleccionar el que tenga el precio más bajo con stock, de ahi lo de agruparlos por id

un proveedor me pasa 900, otro 1500 y otro 4250 referencias por ejem. con un id de fabricante que nosotros utilizamos para agruparlos

ahora nosotros tenemos que listar para volcarlo a nuestra web los el producto de cada proveedor que me este dando un precio bajo y que tengan en stock
, si algún producto esta agotado en todos los proveedores que nos muestre el precio más bajo en este caso con stock 0


Gracias a los 2 por las respuestas, sigo indagando, si alguien tiene alguna idea mas, sea bienvenida
  #6 (permalink)  
Antiguo 02/02/2011, 06:48
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

Tampoco ibamos tan desencaminados, jejeje. Puede ser algo así. Lo único que no he tenido en cuenta que no haya stock en ningún sitio (si tengo un ratillo luego le doy una vuelta a ver)

Código SQL:
Ver original
  1. SELECT ID, id_proveedor, producto, precio, stock
  2. FROM
  3.     (
  4.         SELECT ID, MIN(PRECIO) AS PRE
  5.         FROM TARIFAS
  6.         WHERE STOCK > 0
  7.         GROUP BY ID
  8.     ) T1
  9. INNER JOIN TARIFAS TAR ON
  10. T1.ID = TAR.ID AND T1.PRE = TAR.PRECIO
  #7 (permalink)  
Antiguo 02/02/2011, 11:23
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

Gracias compañero, tu consulta hace casi lo que necesito lo unico es lo del stock, estoy haber si lo saco, pero nada.
  #8 (permalink)  
Antiguo 02/02/2011, 11:34
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

Creo que esta es la definitiva y tiene todo lo que quieres (si no es así, es muy muy parecido)

Código SQL:
Ver original
  1. SELECT ID, id_proveedor, producto, precio, stock
  2. FROM
  3.     (
  4.         (
  5.             SELECT ID, MIN(PRECIO) AS PRE
  6.             FROM TARIFAS
  7.             WHERE STOCK > 0
  8.             GROUP BY ID
  9.         )
  10.         UNION
  11.         (
  12.             SELECT ID, MIN(PRECIO) AS PRE
  13.             FROM TARIFAS
  14.             WHERE STOCK = 0
  15.             GROUP BY ID
  16.         )
  17.     ) T1
  18. INNER JOIN TARIFAS TAR ON
  19. T1.ID = TAR.ID AND T1.PRE = TAR.PRECIO
  #9 (permalink)  
Antiguo 02/02/2011, 11:37
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

Lo tengo!!!!!

Código SQL:
Ver original
  1. SELECT id_proveedor ,t1.id, nombre, precio, dispo
  2. FROM (SELECT id, MIN(precio) AS PRE        
  3. FROM productos      
  4.    
  5. GROUP BY id)  AS T1 INNER JOIN productos ON (T1.PRE = productos .precio) AND (T1.id= productos .id);
  #10 (permalink)  
Antiguo 02/02/2011, 11:45
 
Fecha de Ingreso: febrero-2010
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

anda, no habia visto tu ultimo codigo, mil gracias, tienes paga un copazo como dios manda.
  #11 (permalink)  
Antiguo 03/02/2011, 02:59
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: seleccionar agrupando por id y precio mas bajo y stock mas alto

Mi ultimo código no funciona (me di cuenta ayer) porque la segunda select de la UNION te devolverá todos los registros que tengan algún cero y queremos unicamente los que tengan TODO ceros.

Creo que este si funcionaría (si no funciona, sería algo similar)

Código SQL:
Ver original
  1. SELECT ID, id_proveedor, producto, precio, stock
  2. FROM
  3.     (
  4.         (
  5.             SELECT ID, MIN(PRECIO) AS PRE
  6.             FROM TARIFAS
  7.             WHERE STOCK > 0
  8.             GROUP BY ID
  9.         )
  10.         UNION
  11.         (
  12.             SELECT TA1.ID, TA1.MIN(PRECIO) AS PRE
  13.             FROM TARIFAS TA1
  14.             EXCEPTION JOIN TARIFAS TA2 ON
  15.             TA1.ID = TA2.ID
  16.             WHERE TA2.STOCK > 0
  17.             GROUP BY ID
  18.         )
  19.     ) T1
  20. INNER JOIN TARIFAS TAR ON
  21. T1.ID = TAR.ID AND T1.PRE = TAR.PRECIO

Etiquetas: alto, mas, precio, seleccionar, stock
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:00.