Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2004
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Obtener dos veces el mismo campo.

Hola a todos:

Tengo una tabla de detalle de facturas con los siguientes campos:

Proveedor
Fecha
Precio
Articulo

Y deseo obtener el precio minimo y maximo de compra de un determinado artículo X por proveedor:

Select Proveedor,max(Precio) as PrecioMaximo,min(Precio) as PrecioMinimo Where Articulo=X group by Proveedor

Pero además, quiero saber la fecha en que se compró el artículo X a precio mínimo y la fecha en que se compró a precio máximo. ¿Cómo puedo hacerlo?

Un abrazo y gracias por vuestra atención.
Responder Con Cita
  #2  
Antiguo 23-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Es imposible ayudarte sin saber que motor de datos usas...
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 23-02-2004
Avatar de haron
haron haron is offline
Miembro
 
Registrado: may 2003
Ubicación: Las Palmas de Gran Canaria
Posts: 310
Poder: 21
haron Va por buen camino
puedes usar campos calculados.

tendrias dos campos calculados 'fecha_precio_minimo' y 'fecha_precio_maximo' y la siguiente query:

qryFechaPrecio:

Código:
select max(fecha) as fecha
from tabla
where articulo=:articulo
and proveedor=:proveedor
and precio=:precio
he puesto 'max(fecha)' porque podria haber mas de una fecha en la que se alcanza determinado precio por proveedor y articulo.

en el evento 'onCalcField' escribes:

Código:
// fecha en la que se alcanza el precio maximo:
qryFechaPrecio.close;
qryFechaPrecio.paramByName('articulo').value:=articulo; // variable global
qryFechaPrecio.paramByName('proveedor').value:=query['proveedor'];
qryFechaPrecio.paramByName('precio').value:=query['precio_maximo'];
qryFechaPrecio.open;
query['fecha_precio_maximo']:=qryFechaPrecio['fecha'];

// fecha en la que se alcanza el precio minimo:
qryFechaPrecio.close;
qryFechaPrecio.paramByName('articulo').value:=articulo; // variable global
qryFechaPrecio.paramByName('proveedor').value:=query['proveedor'];
qryFechaPrecio.paramByName('precio').value:=query['precio_minimo'];
qryFechaPrecio.open;
query['fecha_precio_maximo']:=qryFechaPrecio['fecha'];
la ventaja que tiene usar campos calculados en lugar de una unica select, es que divides las consultas en subconsultas mas sencillas que se pueden ejecutar en cualquier motor de bases de datos.

la desventaja es que aumentas el trafico en la red y disminuyes la velocidad de ejecucion.
__________________
“Plantad la semilla de la avaricia en la infértil tierra de la estupidez y obtendreis la bella flor de la mierda”
(Confucio)
Responder Con Cita
  #4  
Antiguo 26-02-2004
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Haron, la idea de utilizar campos calculados funcionan perfectamente. Además, el volumen da datos no es muy grande e, inicialmente, voy a tener funcionando la aplicación en en sólo equipo.

El único inconveniente que encuentro es no poder ordenar por los campos calculado... ¿o si se puede?.

Un abrazo y gracias.
Responder Con Cita
  #5  
Antiguo 26-02-2004
Avatar de haron
haron haron is offline
Miembro
 
Registrado: may 2003
Ubicación: Las Palmas de Gran Canaria
Posts: 310
Poder: 21
haron Va por buen camino
Cita:
Empezado por Jose_Pérez
Haron, la idea de utilizar campos calculados funcionan perfectamente. Además, el volumen da datos no es muy grande e, inicialmente, voy a tener funcionando la aplicación en en sólo equipo.

El único inconveniente que encuentro es no poder ordenar por los campos calculado... ¿o si se puede?.

Un abrazo y gracias.
este es otro inconveniente que se me olvido mencionar.

hace tiempo puse la misma pregunta en el foro, que si se puede ordenar por campos calculados. me dijeron que no.

una solucion que se me ocurre, si necesitas ordenar por campos calculados y el volumen de datos no es muy grande, es olvidarte del TDBGrid y usar un TStringGrid para ordenar el resultado por cualquier campo.

la verdad que es una lastima que no se pueda. el componente TQuery deberia tener alguna opcion para hacerlo, ya que al fin y al cabo trabaja con una copia local y puede ordenar los resultados de esa copia.
__________________
“Plantad la semilla de la avaricia en la infértil tierra de la estupidez y obtendreis la bella flor de la mierda”
(Confucio)
Responder Con Cita
  #6  
Antiguo 26-02-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si vas a trabajar solamente local, una solución muy simple sería tener una tabla con los campos necesarios vacia y cuando actives la consulta, haces un insert sobre esta tabla que tendrá los índices que necesites, luego solamente te queda ordenar por el campo que quieras.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 26-02-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Movido por la curiosidad he hecho la siguiente prueba con Paradox:

Código:
Select Nombre, apellidos, apellidos||nombre as apel
 From alumnos
 order by 3
 
 //o esta otra
 
 Select Nombre, apellidos, apellidos||nombre as apel
  From alumnos
  order by apel
Y funciona correctamente.


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:54:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi