Registro aleatorio

27/10/2003 - 16:03 por Alberto Daniel | Informe spam
Hola Grupo:

Alguien sabe como puedo obtener un registro aleatoreamente en una consulta
SQL???

Saludos
 

Leer las respuestas

#1 Carlos Sacristan
27/10/2003 - 16:44 | Informe spam
Te pego una respuesta de Fernando Guerrero de hace ya un tiempecillo:

**************************************************************************

he creado un procedimiento almacenado que genera una muestra aleatoria de
una tabla determinada (podría ser de una consulta genérica simplemente
modificando algunas líneas) seleccionando aleatoriamente un porcentaje
determinado del número total de registros que componen la consulta o tabla.

El ejemplo se basa en la tabla Sales_Fact de la base de datos
Northwind_Mart
( que se instala como parte del curso MOC 1502 Data Warehose). Sólo copio
los valores de la clave principal, para evitar copiar demasiada
información.

Espero que te sea de utilidad.

alter procedure GetSample_Sales_Fact
@Percent int = 10
AS


CREATE TABLE #Sales (
ID int PRIMARY KEY IDENTITY(1,1),
[TimeKey] int not null,
[CustomerKey] int not null,
[ShipperKey] int not null,
[ProductKey] int not null,
[EmployeeKey] int not null,
Show bit DEFAULT 0)

INSERT #Sales ([TimeKey],
[CustomerKey],
[ShipperKey],
[ProductKey],
[EmployeeKey])
SELECT [TimeKey],
[CustomerKey],
[ShipperKey],
[ProductKey],
[EmployeeKey]
FROM Sales_Fact


DECLARE @Rnd int
DECLARE @Max int
DECLARE @i int

SELECT @Max = MAX(ID)
FROM #Sales

SET @Rnd = RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) ) * @Max

SET @i = 0

WHILE 1 = 1
BEGIN


UPDATE #Sales
SET Show = 1
FROM #Sales t
JOIN Sales_Fact s
ON t.[TimeKey] = s.[TimeKey]
AND t.[CustomerKey]=s.[CustomerKey]
AND t.[ShipperKey]=s.[ShipperKey]
AND t.[ProductKey]=s.[ProductKey]
AND t.[EmployeeKey]=s.[EmployeeKey]
WHERE t.ID = @rnd
AND t.Show = 0


SET @i = @i + @@ROWCOUNT


IF @i (@max * (@Percent / 100.0)) BREAK


SET @Rnd = Rand() * @max
END


SELECT s.*
FROM #Sales t
JOIN Sales_Fact s
ON t.[TimeKey] = s.[TimeKey]
AND t.[CustomerKey]=s.[CustomerKey]
AND t.[ShipperKey]=s.[ShipperKey]
AND t.[ProductKey]=s.[ProductKey]
AND t.[EmployeeKey]=s.[EmployeeKey]
WHERE t.Show = 1
GO


**************************************************************************



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)
MVP SQL Server
Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Alberto Daniel" escribió en el mensaje
news:
Hola Grupo:

Alguien sabe como puedo obtener un registro aleatoreamente en una consulta
SQL???

Saludos


Preguntas similares