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 21-04-2007
radaalvaro radaalvaro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Santa Cruz - Bolivia
Posts: 163
Poder: 19
radaalvaro Va por buen camino
Consulta SQL que me quita el sueño.

Amigos, les pido una mano con esta consulta, al parecer simple ya que solo interviene 1 tabla, pero me dejo pensando mucho.

El problema es el siguiente.

Tengo la tabla
--ListaPrecios
los campos son:
-Precio >> Que es el precio que se le va a asignar a un producto
-FIVigencia >> Es la fecha de Inicio de esa vigencia.
-Cod_Producto >> Es el código del Producto.
-Cod_TipoPrecio >> Es el codigo del Tipo de Lista de Precios.
-Cod_Moneda >> Es la moneda en la que esta el precio asignado.

Ahora lo que pretendo sacar de ahi es.

Una Lista de los Precios en Vigencia de los Productos y Tipos Productos.

Al ser en vigencia eso significa que la fecha de registro tiene que ser la última segun producto y Tipo de Precio

Por ejem.

Prod1 TipoA 01/04/07 50 DOL
Prod1 TipoB 03/04/07 40 DOL
Prod2 TipoA 04/04/07 80 DOL
Prod3 TipoB 08/04/07 300 BOL >> PD: BOL es derivado de Bolivianos.

Estuve pensando en hacer un

Código SQL [-]
Select Cod_Producto, Cod_TipoPrecio, Max(FIVigencia) from ListaPrecios group by Cod_Producto, Cod_TipoPrecio
.

El problema esta en que no se como meter ahi, el precio de esa fecha máxima y la moneda.

Por favor si alguien sabe como hacerlo, les agradeceria mucho su respuesta.

Saludos.
Responder Con Cita
  #2  
Antiguo 21-04-2007
momo momo is offline
Registrado
 
Registrado: jun 2006
Posts: 9
Poder: 0
momo Va por buen camino
Espero poder ayudarte o por lo menos darte una idea, prodrías hacer algo así:

SELECT l.Cod_Producto, l.Precio, l.FIVigencia, l.Cod_TipoPrecio, l.Cod_Moneda
FROM ListaPrecios l,
(Select Cod_Producto, Cod_TipoPrecio, Max(FIVigencia)
from ListaPrecios group by Cod_Producto, Cod_TipoPrecio)a
WHERE l.Cod_Producto = a.Cod_Producto
AND l.Cod_TipoPrecio = a.Cod_TipoPrecio
AND l.FIVigencia = a.FIVigencia


Solo es un ejemplo la idea principal esta plasmada, tienes que asegurarte que en realidad de funciona.

Si alguien tiene una mejor sugerencia adelante.

Saludos.
Responder Con Cita
  #3  
Antiguo 21-04-2007
hach hach is offline
Miembro
 
Registrado: mar 2007
Ubicación: Bariloche, Argentina
Posts: 44
Poder: 0
hach Va por buen camino
se podra hacer algo asi?

No tengo como probarlo, pero se podra hacer algo asi?

Código SQL [-]
 
Select lp.* 
from ListaPrecios lp
where lp.FIVigencia= (select max(lp2.FIVigencia) from ListaPrecios lp2 
where lp2.Cod_Producto=lp.Cod_Producto
and lp2.Cod_TipoPrecio=lp.Cod_TipoPrecio
and lp2.Cod_Moneda=lp.Cod_Moneda)

o mas sencillo, en vez de tener FIVigencia reemplazalo por
FFVigencia (fecha fin vigencia)
el precio actual lo pones con FFVigencia en NULL, al cambiar precio,
insertas un registro con FFVigencia en NULL y le pones
FFVigencia con la fecha actual al registro que cambio

Entonces en el select solo haces

Código SQL [-]
 
Select lp.* 
from ListaPrecios lp
where lp.FFVigencia is NULL


al cabiar precio, dentro de una transaccion haces

update ListaPrecios set FFVigencia = CURRENTDATE
where Cod_Producto=......... and .....

insert into ListaPrecios ... con FFVigencia =NULL


Espero que te sirva la idea
Responder Con Cita
  #4  
Antiguo 21-04-2007
radaalvaro radaalvaro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Santa Cruz - Bolivia
Posts: 163
Poder: 19
radaalvaro Va por buen camino
Buenas sugerencia.

Muchas gracias por sus sugerencias, ambas funcionan son acertadas, pero hay algunos detalles que quisiera subsanar.

Por Ejem, en la siguiente consulta sugerida por hach.
Cita:
Empezado por hach

Código SQL [-]
Select lp.* 
from ListaPrecios lp
where lp.FIVigencia= (select max(lp2.FIVigencia) from ListaPrecios lp2 
where lp2.Cod_Producto=lp.Cod_Producto
and lp2.Cod_TipoPrecio=lp.Cod_TipoPrecio
and lp2.Cod_Moneda=lp.Cod_Moneda)
Estaríamos ejecutando la segunda consulta por cada uno de los registros de la primera consulta.
En caso de tener muchos registros, eso sería un poco costoso en tiempo.

Alguien sabe si sería posible mejorar (optimizar) aún mas esa consulta?

Saludos. Y nuevamente muchas gracias HACH me sirvio mucho tu colaboración.
Responder Con Cita
  #5  
Antiguo 22-04-2007
hach hach is offline
Miembro
 
Registrado: mar 2007
Ubicación: Bariloche, Argentina
Posts: 44
Poder: 0
hach Va por buen camino
No estoy tan seguro...

No estoy seguro que sea una consulta por cada registro...
Yo creo que es una consulta extra por cada
Cod_Producto, Cod_TipoPrecio, Cod_Moneda distintos...
pero no estoy seguro

con los indices correctos no tendrias que tener problemas

Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo despertarse sin sueño sakuragi La Taberna 3 02-04-2007 13:29:53
Ok, cancelo mi sueño y lo reemplazo por este... mamcx Varios 4 09-11-2006 09:18:00
El proyecto Google o el sueño de la biblioteca universal marcoszorrilla Noticias 1 16-12-2004 23:30:05
consulta sobre consulta superhopi SQL 2 16-05-2003 19:01:47


La franja horaria es GMT +2. Ahora son las 03:23:07.


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