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

Error buscando minimo

Estas en el tema de Error buscando minimo en el foro de Bases de Datos General en Foros del Web. Buenas, resulta que tengo tres tablas (Cliente, Tarifario, Tarifa). El cliente elige un tarifario, y cada tarifario tiene un monton de tarifas, la cuestión es ...
  #1 (permalink)  
Antiguo 08/06/2009, 04:40
 
Fecha de Ingreso: abril-2009
Ubicación: En dust 2
Mensajes: 149
Antigüedad: 15 años, 1 mes
Puntos: 2
Error buscando minimo

Buenas, resulta que tengo tres tablas (Cliente, Tarifario, Tarifa). El cliente elige un tarifario, y cada tarifario tiene un monton de tarifas, la cuestión es que quiero buscar la tarifa más barata que este en el tarifario para una operación. Tengo una secuencia pero me saca el saldo y pvp del más barato (el que busco), pero el resto de campos es de otra tarifa.


Código:
select tar.i_id_tarifa, tar.i_id_proveedor, tar.v_ruta, tar.v_prefijo, tar.v_destino, tar.i_id_operacion,
		min(tar.f_coste) as f_coste, min(tar.f_pvp) as f_pvp, tar.i_id_tarifario, tar.d_fecha_alta, tar.d_fecha_mod, tar.i_usuario_creacion,
		tar.i_usuario_mod from tarifa tar inner join operacion ope on 1=
		tar.i_id_operacion inner join tarifario tarif on tar.i_id_tarifario=tarif.i_id_tarifario inner join cliente cli
		on tarif.I_ID_TARIFARIO = cli.I_ID_TARIFARIO WHERE cli.I_ID_CLIENTE =3 group by f_coste and F_PVP
Si alguien puede echarme una mano se lo agradeceria.

P.D.: MySql

Un saludo

Última edición por erevaristo; 08/06/2009 a las 04:48
  #2 (permalink)  
Antiguo 08/06/2009, 06:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 2 meses
Puntos: 574
Respuesta: Error buscando minimo

Código sql:
Ver original
  1. SELECT tar.i_id_tarifa,
  2.     tar.i_id_proveedor,
  3.     tar.v_ruta,
  4.     tar.v_prefijo,
  5.     tar.v_destino,
  6.     tar.i_id_operacion,
  7.     MIN(tar.f_coste) AS f_coste,
  8.     MIN(tar.f_pvp) AS f_pvp,
  9.     tar.i_id_tarifario,
  10.     tar.d_fecha_alta,
  11.     tar.d_fecha_mod,
  12.     tar.i_usuario_creacion,
  13.     tar.i_usuario_mod
  14. FROM tarifa tar
  15.     INNER JOIN operacion ope
  16.         ON 1=tar.i_id_operacion
  17.     INNER JOIN tarifario tarif
  18.         ON tar.i_id_tarifario=tarif.i_id_tarifario
  19.     INNER JOIN cliente cli
  20.         ON tarif.I_ID_TARIFARIO = cli.I_ID_TARIFARIO
  21. WHERE cli.I_ID_CLIENTE =3
  22. GROUP BY f_coste AND F_PVP

No he tocado nada, eso no funciona pero si no nos das mas informació sera dificil ayudarte....

Por lo que veuo ahí la tabla tarifa tinen como minimo los siguientes campos


tarifa

i_id_tarifa <-- sera la PK
f_coste
f_pvp

Que o quien nos asegura que el minimo de f_coste y el minimo de f_pvp son los dos de la misma tarifa i_id_tarifa?

Es decir

SELECT min(f_coste),min(f_pvp) from tarifa

da dos valores que no tinen porque ser de la misma tarifa...

group by f_coste and F_PVP

el group by no se puede hacer sobre los campos donde tienes las funciones de agregado....en otras palabras no tinene sentido buscar el minimo de algo agrupando por ese algo!!!

intenta explicarte un poco mas e intentaremos ayudarte....

Quim
  #3 (permalink)  
Antiguo 08/06/2009, 07:04
 
Fecha de Ingreso: abril-2009
Ubicación: En dust 2
Mensajes: 149
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Error buscando minimo

muchas gracias, ya lo he solucionado e modificado la secuencia y se quedaría así:

Código:
select distinct 
            tar.i_id_tarifa,
            tar.i_id_proveedor,
            tar.v_ruta,
            tar.v_prefijo,
            tar.v_destino,
            tar.i_id_operacion,
            f_coste,
            f_pvp,
            tar.i_id_tarifario,
            tar.d_fecha_alta,
            tar.d_fecha_mod,
            tar.i_usuario_creacion,
            tar.i_usuario_mod,
            (tar.F_COSTE + tar.F_PVP) as suma 
from 
            tarifa tar inner join operacion ope on tar.i_id_operacion=1
            inner join tarifario tarif on tar.i_id_tarifario=tarif.i_id_tarifario
            inner join cliente cli on tarif.I_ID_TARIFARIO = cli.I_ID_TARIFARIO
WHERE 
            cli.I_ID_CLIENTE =3  order by suma Limit 1
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 18:04.