2012-03-20 6 views
2

Я пытаюсь выбрать произвольное подмножество записей, используя либо rand(), либо newid(), но в любое время, когда я запускаю следующее, я всегда получаю те же результаты назад :Выбор случайного подмножества в SQL (Sybase Server IQ)

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

select top 10 * from #mytable order by rid 

Я перепробовал все изменения, но это, кажется, что сервер Sybase IQ всегда возвращает значение же рандов(), когда я это делаю, как выше. Когда я пытаюсь сделать

SELECT * FROM othertable order by newid() 

Я получаю сообщение об ошибке, когда запрещается использовать newid() в порядке.

Любые предложения?

+0

Вы хотите увидеть генератор случайных чисел, прежде чем принимать звонки в рандов(). Я предлагаю вам положить его в сохраненный proc; вы можете затем сгенерировать генератор случайных чисел, а затем выполнить первый запрос. 'ORDER BY NEWID()' свойственен MS SQL Server, поэтому он не будет работать в Sybase. Может понадобиться следующий поток: http://database.ittoolbox.com/groups/technical-functional/sybase-l/using-the-function-rand-on-sybase-iq-1547367 –

+0

Я думаю, вы имеете в виду «__seed__ генератор случайных чисел "... –

ответ

0

Случайные значения в двигателе IQ являются детерминированными, заставляют запрос через двигатель ASA, как показано ниже (предупреждение: оно медленное, если у вас много строк).

select (select rand() as rnd) from mytable 
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) 
2

В Sybase T-SQL, функция системы NEWID() генерирует человек-читаемым, глобально уникальные идентификаторы. Включить системную функцию NEWID() в предложении ORDER BY при выдаче инструкции SELECT в целевой таблице.

Использование:

SELECT top 10 id from TABLE order by NEWID();