3

我正在尝试使用 rand() 或 newid() 选择记录的随机子集,但无论何时运行以下命令,我总是得到相同的结果:

SELECT *,rand() as rid
INTO #mytable
FROM othertable

select top 10 * from #mytable order by rid

我已经尝试了这个的每一个变体,但是当我像上面那样做时,sybase server iq 似乎总是返回相同的 rand() 值。当我尝试做

SELECT * FROM othertable order by newid()

我收到一个错误,说在 order by 中使用 newid() 是非法的。

有什么建议么?

4

3 回答 3

3

在 Sybase T-SQL 中,NEWID() 系统函数生成人类可读的全局唯一 ID。在目标表上发出 SELECT 语句时,在 ORDER BY 子句中包括 NEWID() 系统函数。

用法:

SELECT top 10 id from TABLE order by NEWID();
于 2013-10-03T07:46:43.493 回答
0

IQ 引擎中的随机值是确定性的,强制通过 ASA 引擎进行查询,如下所示(警告:如果您有很多行,它会很慢)。

select (select rand() as rnd) from mytable
于 2012-03-23T08:43:17.003 回答
0

您可以通过使用 row_number() 函数和当前时间值来获得随机效果。尝试这样的事情:

with q as (
    SELECT
        *,
        row_number() over (order by cPublisher) n, -- getting row number
        DATEPART(ms, now()) t -- getting current ms value
    FROM 
        #mytable
)

select top 10
    *
from
    q
order by 
    -- order by some combination t and n, for example t * n and sort it like char
    cast(t * n as char)
于 2013-08-28T11:48:11.543 回答