Obtener fila sin Nro de fila...?

15/12/2006 - 15:37 por Daniel G. Samborski | Informe spam
Hola, tengo una onsulta.

Supongamos que tengo una tabla llamada Sorteo y esta tiene:

Nombre Direccion Telefono
Daniel J. Jaurez 123 587485
Gustavo A. Thomas 232 9874587
Samborski P. de Alvear 233 542125
Jorge Av. San Diego 22 2359878
Roberto Av. San Martin 12 5878525

Y deseo obtener al azar una de estas filas.

Para esto he realizado este codigo.

declare @maximo as int
declare @numero int
select @maximo=count(nombre) from sorteo
set @numero=(rand()*@maximo)+1
if @numero<1 set @numero=1
if @numero>@maximo set @numero=@maximo

De esta manera obtengo un Nro al azar entre la primera fila y la ultima del
total de filas de la tabla...Ahora, como hago un select de esa fila si la
tabla no tiene Nº de filas.

select nombre, direccion, telefono from tabla where...

Preguntas similare

Leer las respuestas

#6 Daniel G. Samborski
15/12/2006 - 20:06 | Informe spam
Gracias, vere como resulta.


Daniel.

"Javier Loria" escribió en el mensaje
news:%236%
Hola Daniel:
Sigue la recomendacion de Alejandro que usar: CHECKSUM(NEWID())
Saludos,


Javier Loria
Costa Rica-MVP
Solid Quality Learning

"Javier Loria" wrote in message
news:
Hola Daniel:
Una forma conocidida es usar una la funcion NEWID:
>> SELECT TOP 1 Nombre, Direccion, Telefono
FROM Sorteo
ORDER BY NEWID()
>> Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning

"Daniel G. Samborski" wrote in
message news:
Hola, tengo una onsulta.

Supongamos que tengo una tabla llamada Sorteo y esta tiene:

Nombre Direccion Telefono
Daniel J. Jaurez 123 587485
Gustavo A. Thomas 232 9874587
Samborski P. de Alvear 233 542125
Jorge Av. San Diego 22 2359878
Roberto Av. San Martin 12 5878525

Y deseo obtener al azar una de estas filas.

Para esto he realizado este codigo.

declare @maximo as int
declare @numero int
select @maximo=count(nombre) from sorteo
set @numero=(rand()*@maximo)+1
if @numero<1 set @numero=1
if @numero>@maximo set @numero=@maximo

De esta manera obtengo un Nro al azar entre la primera fila y la ultima
del total de filas de la tabla...Ahora, como hago un select de esa fila
si la tabla no tiene Nº de filas.

select nombre, direccion, telefono from tabla where...










Respuesta Responder a este mensaje
#7 Carlos Sacristán
18/12/2006 - 08:35 | Informe spam
Alejandro, por qué CHECKSUM(NEWID()) en vez de simplemente NEWID() ?


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Alejandro Mesa" escribió en el
mensaje news:
Daniel,

Cual es la clave primaria de esa fila?

De todas maneras puedes usar el siguiente codigo para seleccionar una fila
al asar, si tu SQL Server esta instalado en NT 4.00 o mayor.

select top 1 *
from tu_tabla
order by checksum(newid())


AMB

"Daniel G. Samborski" wrote:

Hola, tengo una onsulta.

Supongamos que tengo una tabla llamada Sorteo y esta tiene:

Nombre Direccion Telefono
Daniel J. Jaurez 123 587485
Gustavo A. Thomas 232 9874587
Samborski P. de Alvear 233 542125
Jorge Av. San Diego 22 2359878
Roberto Av. San Martin 12 5878525

Y deseo obtener al azar una de estas filas.

Para esto he realizado este codigo.

declare @maximo as int
declare @numero int
select @maximo=count(nombre) from sorteo
set @numero=(rand()*@maximo)+1
if @numero<1 set @numero=1
if @numero>@maximo set @numero=@maximo

De esta manera obtengo un Nro al azar entre la primera fila y la ultima
del
total de filas de la tabla...Ahora, como hago un select de esa fila si la
tabla no tiene Nº de filas.

select nombre, direccion, telefono from tabla where...



Respuesta Responder a este mensaje
#8 Carlos Sacristán
18/12/2006 - 16:00 | Informe spam
Gracias por la explicación Alejandro. Revisaré esos enlaces


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Alejandro Mesa" escribió en el
mensaje news:
Hola Carlos,

Muy buena pregunta. La respuesta exacta no la tengo, pero te puedo decir
que
expertos en la materia dicen que esta formula produce valores con mejor
distribucion aleatoria que la funcion newid().

Solution to Catch That Bug! Random Row per Group
http://www.sqlmag.com/articles/index.cfm?articleid“966

The Perils of T-SQL Randomization
http://www.sqlmag.com/Article/Artic...93521.html

En los libros en linea podemos leer que la comparacion de este tipo de
data
no se realiza comparando los patrones de bits de ambos valores, pero no se
explica como es que se realiza la comparacion. Asi que teniendo un valor
entero, resultado de la fucnion checksum, se me hace menos oscuro el
camino
usado.

Saludos,

Alejandro Mesa


"Carlos Sacristán" wrote:

Alejandro, por qué CHECKSUM(NEWID()) en vez de simplemente NEWID() ?


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Alejandro Mesa" escribió en el
mensaje news:
> Daniel,
>
> Cual es la clave primaria de esa fila?
>
> De todas maneras puedes usar el siguiente codigo para seleccionar una
> fila
> al asar, si tu SQL Server esta instalado en NT 4.00 o mayor.
>
> select top 1 *
> from tu_tabla
> order by checksum(newid())
>
>
> AMB
>
> "Daniel G. Samborski" wrote:
>
>> Hola, tengo una onsulta.
>>
>> Supongamos que tengo una tabla llamada Sorteo y esta tiene:
>>
>> Nombre Direccion Telefono
>> Daniel J. Jaurez 123 587485
>> Gustavo A. Thomas 232 9874587
>> Samborski P. de Alvear 233 542125
>> Jorge Av. San Diego 22 2359878
>> Roberto Av. San Martin 12 5878525
>>
>> Y deseo obtener al azar una de estas filas.
>>
>> Para esto he realizado este codigo.
>>
>> declare @maximo as int
>> declare @numero int
>> select @maximo=count(nombre) from sorteo
>> set @numero=(rand()*@maximo)+1
>> if @numero<1 set @numero=1
>> if @numero>@maximo set @numero=@maximo
>>
>> De esta manera obtengo un Nro al azar entre la primera fila y la
>> ultima
>> del
>> total de filas de la tabla...Ahora, como hago un select de esa fila si
>> la
>> tabla no tiene Nº de filas.
>>
>> select nombre, direccion, telefono from tabla where...
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida