Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-02-2008
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 20
Gabo Va por buen camino
Cita:
Empezado por gluglu Ver Mensaje
No me aclaro bien con tu consulta ....

Deseas obtener un listado de la tabla Productos, o un listado de la tabla Empresas ?

Lo digo porque en tu condición 'From' especificas que obtenga los registros de la tabla Productos. Si pudieras indicar un set de datos de terminados como ejemplo, y el resultado que deseas obtener, intentaría ayudarte.

Antes que nada, gracias por responder...
Con éste me quedo en +1 (no en post, si no en deuda contigo )

Quiero obtener un listado de la tabla Productos.

Supongamos que:

Código:
EMPRESA
-------
01 JB MARTINEZ
02 COLABE, SA
 
TIPO
----
11 SEGUNDA
12 PRIMERA
 
PRODUCTO
--------
21  01  11  02/12/07  23,34
22  01  12  01/12/07  20,67
23  02  11  04/12/07  56,67
24  01  11  03/12/07  26,78
25  02  11  07/12/07  34,56
26  01  12  08/12/07  56,78
El listado debería quedar así:

Código:
TIPO     EMPRESA     PRODUCTO     FECHA     PRECIO
---------------------------------------------------   
PRIMERA  JB MARTINEZ 26           08/12/07  56,78
SEGUNDA  COLABE,SA   25           07/12/07  34,56
SEGUNDA  JB MARTINEZ 24           03/12/07  26,78
Es decir, cuando el tipo y la empresa son el mismo, conservo el registro con la fecha mayor.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.

Última edición por Gabo fecha: 01-03-2008 a las 00:02:22.
Responder Con Cita
  #2  
Antiguo 01-03-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
A ver si esto funcionara ....

Código SQL [-]
Select TIPO.TIPO_NOMBRE, EMPRESA.EMPRESA_NOMBRE, PRODUCTO.PRODUCTO_CODIGO,
Max(PRODUCTO.PRODUCTO_FECHA), Max(PRODUCTO.PRODUCTO_PRECIO)
from PRODUCTO
Join TIPO
  On PRODUCTO.TIPO_CODIGO = TIPO.TIPO_CODIGO 
Join EMPRESA
  On PRODUCTO.EMPRESA_CODIGO = EMPRESA.EMPRESA_CODIGO 
Where EMPRESA.EMPRESA_CODIGO = :empresa  // Supongo que esta condición sobra (pero la he dejado por si acaso)
Group By PRODUCTO.EMPRESA_CODIGO, PRODUCTO.TIPO_CODIGO

Insisto .... no lo he probado.

Pero me remito adicionalmente a este hilo

Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 01-03-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
Ya me he dado cuenta de un fallo del código que acabo de poner.

Supongo que deseas obtener el precio correspondiente a la mayor fecha, no el mayor precio .... no es verdad ?

Con la sentencia que te he puesto, no se obtiene así. Se obtiene por un lado la mayor fecha, y por otro lado el mayor de los precios para cada uno de los registros del Group By ...

A ver .... estoy en ello.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 01-03-2008
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 20
Gabo Va por buen camino
Cita:
Empezado por gluglu Ver Mensaje
Ya me he dado cuenta de un fallo del código que acabo de poner.

Supongo que deseas obtener el precio correspondiente a la mayor fecha, no el mayor precio .... no es verdad ?

Con la sentencia que te he puesto, no se obtiene así. Se obtiene por un lado la mayor fecha, y por otro lado el mayor de los precios para cada uno de los registros del Group By ...

A ver .... estoy en ello.
Bueno, justo iba a postear...

Además, con los group by de esa forma da el error de "referencia de columna inválida" y al ajustarlo a los campos del select no filtra por el mayor, sino que los muestra todos.

He visto también la solución del otro hilo, voy a intentar adaptarla...
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #5  
Antiguo 01-03-2008
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 20
Gabo Va por buen camino
Sobre la otra solución:

Código SQL [-]
Select Distinct Co1.Cot,
(Select Max(Co2.Sub) from Cotizaciones Co2
 where Co1.Cot = Co2.Cot)
from Cotizaciones Co1
La adapté y quedo así:

Código SQL [-]
 
SELECT DISTINCT PRODUCTO.PRODUCTO_CODIGO, TIPO.TIPO_NOMBRE, EMPRESA.EMPRESA_NOMBRE, PRODUCTO.PRODUCTO_NOMBRE,
PRODUCTO.PRODUCTO_PRECIO, (SELECT MAX(PRODUCTO.PRODUCTO_FECHA) FROM PRODUCTO JOIN TIPO ON PRODUCTO.TIPO_CODIGO = TIPO.TIPO_CODIGO
              JOIN EMPRESA ON PRODUCTO.EMPRESA_CODIGO = EMPRESA.EMPRESA_CODIGO)
FROM PRODUCTO JOIN TIPO ON PRODUCTO.TIPO_CODIGO = TIPO.TIPO_CODIGO
              JOIN EMPRESA ON PRODUCTO.EMPRESA_CODIGO = EMPRESA.EMPRESA_CODIGO
GROUP BY PRODUCTO.PRODUCTO_CODIGO, TIPO.TIPO_NOMBRE, EMPRESA.EMPRESA_NOMBRE, PRODUCTO.PRODUCTO_NOMBRE, PRODUCTO.PRODUCTO_PRECIO

Pero el problema es que al hacer "SELECT MAX(PRODUCTO.PRODUCTO_FECHA)" le estoy diciendo arbitrariamente que coloque en todos los registros que obtenga la fecha mayor y no que muestre sólo la mayor
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #6  
Antiguo 01-03-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
Por más que lo pienso, creo que no es posible con un simple 'Select'.

El error que indicas arriba de 'referencia de columna inválida' no es mayor problema. Bastaría incluir todos aquellos campos que no sean 'Max' en el Group By, aunque sean los respectivos nombres de empresas y tipos obtenidos de los join.

Analizando el asunto .... necesitas obtener el 'Producto_Codigo' para cada uno de los valores del Max(Fecha). Una vez que tuvieras ese 'Producto_Codigo' podrías obtener el precio correspondiente a ese registro.

Y ahí veo el problema. No sé cómo obtenerlo. Lo único que se me ocurre es incluir dos DataSet's en tu aplicación, uno para calcular el Max(Fecha) por cada Producto, y el segundo DataSet que sea 'detalle' del primer DataSet 'maestro', y esten referenciados por esa columna 'Maxima Fecha' obtenida. Y ya en el segundo DataSet buscas el 'Producto_Codigo' y su correspondiente 'Precio' asociado.

Si no lo haces con dos DataSet's, entonces veo la necesitad de implementar un Stored Procedure que te lo resuelva. Con ello si que no sería mayor problema.

Si a alguien se le ocurre otra solución, bienvenida sea !
__________________
Piensa siempre en positivo !
Responder Con Cita
  #7  
Antiguo 01-03-2008
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 20
Gabo Va por buen camino
Pues yo tampoco veo muy claro el asunto. Entre las dos opciones que me das, creo que me quedo con el procedimiento almacenado.

De todas formas, lo veré mañana que ya es la 1:00 y me levanto a las 5:30

¡Gracias por la ayuda gluglu!
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #8  
Antiguo 01-03-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 24
Caro Va por buen camino
Hola Gabo

Nose si te he entendido, pero talvez podrías hacer una subconsulta para obtener las fechas maximas agrupado por tipo y empresa.

Código SQL [-]
select t.tipo_nombre, e.empresa_nombre, p.producto_codigo, p.producto_fecha, p.producto_precio
from tipo t, producto p, empresa e
where (p.tipo_codigo=t.tipo_codigo) and (p.empresa_codigo=e.empresa_codigo)
      and p.producto_fecha in (select MAX(producto_fecha)
                               from producto
                               group by tipo_codigo, empresa_codigo)


Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 01-03-2008 a las 16:19:38.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Articulo sobre la facilidad de probar componentes open source en windows sobre linux gmontes Noticias 0 22-08-2007 22:34:16


La franja horaria es GMT +2. Ahora son las 02:00:24.


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