Tema: SQL top 10
Ver Mensaje Individual
  #5  
Antiguo 30-06-2006
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Reputación: 22
lbuelvas Va por buen camino
Hola foro, un gusto regresar a colaborar (y que me colaboren).

Bueno, estoy trabajando con firebird 1.5.2 y me lleve tamaña sorpresa al tratar de hacer un subquery para poder responder la pregunta de este hilo.

El codigo seria:

Código SQL [-]
select first 10 *
from factura 
order by numero_factura

Supongo que el identificador de la tabla es numero_factura, pero es posible que la numeracion de la facturacion no este en orden cronologico, y ese caso lo tengo con un cliente donde la factura 0001 es hecha el 10/10/2006 y la factura 0002 es hecha el 09/09/2006.

En vista de esa situacion me puse a hacer subconsultas y los resultados no fueron congruentes, pues lo que me mostro fue una lista con 5 registros pero de personas que empezaban los nombre por la letra A. Este es el codigo:

Código SQL [-]
select first 5 *
from predio
where id in  (select first 5 id
                 from predio
                 order by id
                )
order by nombre

Entonces sugeriria utilizar un procedimiento almacenado de la forma que presento a continuacion, es un ejemplo de una de mis bases de datos.

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE SP_PRUEBA (
    cantidad integer)
returns (
    id_predio varchar(15))
as
begin
  for execute statement 'select first ' || (cast (cantidad as varchar(10))) || ' id ' ||
                        'from predio '  ||
                        'order by id '
                        into :id_predio
  do begin
    suspend;
  end
end^

SET TERM ; ^

y luego puedes hacer la consulta

Código SQL [-]
select *
from predio a
inner join  sp_prueba (3) b on (a.id = b.id_predio)
order by nombre

Como enredadito no ?

Espero que sea de utilidad o de ampliacion porque a mi la subconuslta no me funciono.
__________________
Luis Fernando Buelvas T.
Responder Con Cita