Попробуйте с группой, имея пункт
select id
from table
group by id
having count(distinct variant_id) > 1
Хороший генератор Псевдослучайного числа для Fortran90 может быть найден в Intel Math Kernel Vector Statistical Library. Они ориентированы на многопотоковое исполнение. Кроме того, почему это должно быть ориентировано на многопотоковое исполнение? Если Вы хотите, чтобы каждый поток получил тот же список, инстанцируйте нового PRNG для каждого потока с тем же семенем.
Большинству повторяемых генераторов случайных чисел нужно состояние в некоторой форме. Без состояния они не могут сделать то, что прибывает затем. Чтобы быть ориентированными на многопотоковое исполнение, Вам нужен способ содержать на состояние самим (т.е., это не может быть глобально).
Я понимаю, что Вам нужен каждый поток для создания того же потока случайных чисел.
Очень хороший Псевдослучайный Генератор, который генерирует восстанавливаемый поток чисел и довольно быстр, является MT19937. Просто удостоверьтесь, что Вы генерируете семя прежде, чем метать икру от потоков, но генерируете отдельный экземпляр MT в каждом потоке (заставьте экземпляр MT распараллелить локальный). Тем путем будет гарантироваться, что каждый MT произведет тот же поток чисел.
Когда Вы говорите, что "потребности генерировать ту же последовательность случайных чисел" делают Вы имеете в виду это
или
В каждом из этих случаев необходимо отметить то, что Neil Butterworth говорят о статистике: большинство обычных гарантий, что PRNG нравится требовать, не надежно, когда потоки соединения генерировали таким образом.
В обоих случаях Вам нужен локальный для потока PRNG. Я не знаю то, что доступно в f90..., но можно также записать, что Вы владеете (вихрь Мерсенна поиска и пишете routne, который берет сохраненное состояние в качестве параметра...).
В Фортране 77, это посмотрело бы что-то как
function PRNGthread (state)
double state(statesize)
c stuff happens here which uses and manipulates the state vector...
PRNGthread = result
return
и каждый из Ваших потоков должен поддержать отдельный вектор состояния, хотя все будут использовать то же начальное значение.
Альтернативы, кажется:
Не очень ободрительный список, я знаю. И добавить к нему, я понятия не имею, как реализовать любой из них в ФОРТРАНЕ!
Я написал многопотоковую версию Mersenne Twister / MT19973 на Фортране 90. Состояние PRNG сохраняется в производном типе (randomNumberSequence), и вы используете процедуры для заполнения генератора или получения следующего элемента в последовательности.
См. http://code.google.com/p/i3rc-monte-carlo-model/source/browse/trunk/Code/RandomNumbersForMC.f95