Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-06-2007
JBalda JBalda is offline
Miembro
 
Registrado: nov 2006
Posts: 11
Poder: 0
JBalda Va por buen camino
Select aleatorio

Hola foro:

Mi consulta es la siguiente: Como puedo hacer con sql para obtener una cantidad x de registros de una tabla en forma aleatoria?

Utilizo Firebird 2.0, delphi 6.

Saludos
Responder Con Cita
  #2  
Antiguo 26-06-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola JBalda, no te limites en cuanto a espacio, ya has hecho algo, tienes algún error, en fin, entre mas información nos des seguro se te va a poder ayudar de una manera mejor.

Por otro lado te doy la bienvenida y te recomiendo que leas la guía de estilo para que conozcas las reglas de nuestro foro.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 26-06-2007
JBalda JBalda is offline
Miembro
 
Registrado: nov 2006
Posts: 11
Poder: 0
JBalda Va por buen camino
Select aleatorio

Bueno Egostar, tratare de ser mas especifico. Dentro de una base de datos firebird tengo una tabla de stock de articulos. Mi aplicacion entre otras cosas permite efectuar inventarios sobre el 100% de la tabla de articulos o sobre una cantidad parcial. La pregunta concreta es si conocen alguna forma de tirar una select sobre dicha tabla que me retorne una cantidad de registros previamente ingresada, de manera aleatoria.
Lei algo en este foro sobre la funcion RAND() , pero no se como utilizarla.

Saludos
Responder Con Cita
  #4  
Antiguo 26-06-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Estuve pensando...

No se si se permitirá pasar parámetros en la sentencia first. Mi idea es generar un SQL algo similar a esto:

Código SQL [-]
SELECT FIRST :Cantidad tus_campos FROM tu_tabla

Y hacer que el parámetro cantidad recibe un número aletorio:

Código Delphi [-]
Params.ByName('Cantidad').AsInteger := Random(ValorMáximo) + 1;

El +1 se debe a que random puede devolver 0 y provocar un error.
No he probado esto...
En este momento no tengo Delphi.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 26-06-2007
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
Yo te iba a proponer algo parecido utilizando:
Código SQL [-]
Select First(x)  Skip(x) *
From MiTabla

Pero al decir aleatorio no veo bien que es lo que quieres, porque seleccionar las 100 filas primeras yo no lo veo como aleatorio, a no ser que lo que quieras sea seleccionar un número aleatorio de filas y entonces la respuesta dada por Delphius es la correcta?

Con este método lo que es aleatorio es el número de filas, pero no las filas en sí.

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
  #6  
Antiguo 26-06-2007
JBalda JBalda is offline
Miembro
 
Registrado: nov 2006
Posts: 11
Poder: 0
JBalda Va por buen camino
Ante todo muchas gracias por sus prontas respuestas. Efectivamente lo que necesito son filas aleatorias y no una determinada cantidad. Por ejemplo, si mi tabla tiene 100 registros, genero 3 nros aleatorios (15,78,91), como resultado deberia obtene el registro nro 15,78 y 91.


saludos.
Responder Con Cita
  #7  
Antiguo 26-06-2007
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
De no tener un campo autoincremento y seleccionarlos por ahí, creo que no quedará más remedio que crear una tabla auxilar.

Hacer avanzar el puntero hasta el registro 15, insertarlo en la tabla auxiliar y así hasta el final.(78....):

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
  #8  
Antiguo 27-06-2007
JBalda JBalda is offline
Miembro
 
Registrado: nov 2006
Posts: 11
Poder: 0
JBalda Va por buen camino
Utilizando select First y Skip y luego grabando una tabla temporal logro lo que estaba buscando. No se si sera la forma mas optima pero funciona.

Gracias marcoszorrilla y foro.

Saludos
Responder Con Cita
  #9  
Antiguo 27-06-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 22
TJose Va por buen camino
Hola

Cita:
Por ejemplo, si mi tabla tiene 100 registros, genero 3 nros aleatorios (15,78,91), como resultado deberia obtene el registro nro 15,78 y 91.
y si haces
Código SQL [-]
select * from mitabla where id in (15,78,91)

Saludos
TJose
Responder Con Cita
  #10  
Antiguo 27-06-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Como lo expone TJose anda...

Lo acabo de probar con IBExpert y funciona.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #11  
Antiguo 27-06-2007
JBalda JBalda is offline
Miembro
 
Registrado: nov 2006
Posts: 11
Poder: 0
JBalda Va por buen camino
Cita:
Empezado por TJose


y si haces

Código SQL [-]

select * from mitabla where id in (15,78,91)


Correcto TJose, pero funciona siempre y cuando tengas un campo id secuencial en tu tabla, lamentablemente no es mi caso.
Responder Con Cita
  #12  
Antiguo 27-06-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 22
TJose Va por buen camino
Hola

debes crear un stored procedure que te devuelva datos y dentro de este crear un campo artificial con el ordinal del registro.

Aqui se mustra como hacer el procedimiento.

Saludos
TJose
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
generar numero de 9 cifras aleatorio que nunca se repita coletaun Varios 9 19-02-2007 10:34:29
como burlar codigo de seguridad aleatorio? lookmydoom PHP 6 06-07-2006 19:01:48
Orden aleatorio al 7o digito!!! jdattoli Tablas planas 1 20-10-2005 18:15:09
Presentar ordern aleatorio en un Select aerosB4 Firebird e Interbase 4 16-08-2004 12:53:21
Error aleatorio, verdadera locura buitrago Varios 0 14-03-2004 07:29:50


La franja horaria es GMT +2. Ahora son las 23:06:28.


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