3

rand() または newid() を使用してレコードのランダムなサブセットを選択しようとしていますが、次を実行するたびに、常に同じ結果が返されます。

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

select top 10 * from #mytable order by rid

これのすべてのバリエーションを試しましたが、上記のようにすると、sybase サーバー 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

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 に答える
0

IQ エンジンのランダム値は決定論的です。以下のように ASA エンジンを介してクエリを強制します (警告: 行数が多いと遅くなります)。

select (select rand() as rnd) from mytable
于 2012-03-23T08:43:17.003 に答える