Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Random dentro de una consulta

Estas en el tema de Random dentro de una consulta en el foro de SQL Server en Foros del Web. Hola muchachos, os cuento lo que estoy intentando hacer y no encuentro informacion. Tengo una tabla donde almaceno unos mensajes TablaMensaje Id|mensaje|GrupoMensaje 1|error|1 2|no se ...
  #1 (permalink)  
Antiguo 07/05/2009, 12:39
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 15 años, 11 meses
Puntos: 31
Random dentro de una consulta

Hola muchachos, os cuento lo que estoy intentando hacer y no encuentro informacion.

Tengo una tabla donde almaceno unos mensajes

TablaMensaje

Id|mensaje|GrupoMensaje
1|error|1
2|no se puede|1
3|muy bien|2
4|fenomenal|2
5|estupendo|2
6|no lo se|3
7|quien sabe|3

Entonces cuando lanzo esta consulta

Código:
SELECT mensaje from TablaMensaje where GrupoMensaje = 1;
Esto me cogera todos los mensajes

Lo que quiero conseguir es que me coja aleatoriamente un mensaje segun el GrupoMensaje, para no dar siempre una respuesta, algo como

select RAN(IdMensaje) from TablaMensaje where GrupoMensaje = 1;

pero esto me devuelve esto por ejemplo:

0,71359199321292355
0,7136106261841817

el interpreta que me haga un random entre 0 y 1

y lo que quiero es que me muestre a veces "error" y otras "no se puede"

espero haberme explicado, alguna idea

gracias !
  #2 (permalink)  
Antiguo 07/05/2009, 13:02
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 11 meses
Puntos: 38
Respuesta: Random dentro de una consulta

tienes que cambiar la semilla para que genere un numero nuevo...

este seria un ejemplo, solo adaptalo en caso de que existan mas de dos registros en la table, incluso puedes generar una funcion de usuario que te retorne el id para filtrar la tabla..

Código:
SELECT mensaje 
FROM  TablaMensaje 
WHERE GrupoMensaje = 1 AND 
      Id = (CAST(RAND( (DATEPART(mm, GETDATE()) * 100000)
           + (DATEPART(ss, GETDATE()) * 1000 )
           + DATEPART(ms, GETDATE()) ) * 100 as int) % 2) + 1;
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 07/05/2009 a las 15:26
  #3 (permalink)  
Antiguo 07/05/2009, 13:06
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 15 años, 11 meses
Puntos: 31
Respuesta: Random dentro de una consulta

Que rapidez, tiene muy buena pinta lo que has puesto, lo pruebo y os cuento que tal me ha ido.

Gracias Andres

saludos !
  #4 (permalink)  
Antiguo 07/05/2009, 17:14
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Random dentro de una consulta

Andres95

¿No bastaria con un simple ORDER BY NEWID()?

Recuerdo que alguna vez lo hice, pero no estoy muy seguro y no tengo forma de probarlo
  #5 (permalink)  
Antiguo 07/05/2009, 20:43
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 11 meses
Puntos: 38
Respuesta: Random dentro de una consulta



Si es cierto...es mas sencillo..


Un saludo ..
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #6 (permalink)  
Antiguo 07/05/2009, 21:22
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Random dentro de una consulta

claro !!, lo acabo de probar en casa y funciona, con un simple ORDER BY NEWID()

Saludos
  #7 (permalink)  
Antiguo 08/05/2009, 12:41
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 15 años, 11 meses
Puntos: 31
De acuerdo Respuesta: Random dentro de una consulta

La primera no me funcionaba algo pondria mal, la segunda, simple directa y facil.

Gracias a los dos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:46.