2013-12-25 2 views
2

Я хочу распространять 116 записей для пользователей через SQL, но каков наилучший способ сделать это случайным образом, например, если это сработало, что каждый получает 5 строк, как я произвольно вставляю записи с датой datetime который отличается каждый час?случайное распределение через SQL

Итак, для пользователя 1, я вставляю каждые 10 минут, но для пользователя мне нужно что-то другое, может быть, каждые 5 минут?

Я думал, если я случайно получаю число между 5-10, а затем использую его как мой интервал? Затем введите временную таблицу, которая называется [USED], а затем выполните запрос NOT EXISTS и убедитесь, что мой случайный интервал там отсутствует.

Идея состоит в том, чтобы заставить ее выглядеть так, как будто все создали там записи, поэтому я не хочу, чтобы она выглядела как вставка для партии. Это должно выглядеть так, как человек сделал это.

ответ

1

Это не звучит очень «случайно», как если бы он выглядел поддельным, чтобы иметь 5 записей для каждого пользователя. Это лучший подход, я думаю:

INSERT INTO your_table (User_ID,Date_Col) 
VALUES ((SELECT TOP 1 ID FROM your_user_table ORDER BY NEWID()), 
DATEADD(second, rand()*36000, DATEADD(day, rand()*120, getdate())) 
+0

Хорошее начало, но я считаю его более сложным, чем это. Например, как я знаю, сколько строк входит на каждого пользователя? – PriceCheaperton

+0

Если вы хотите, чтобы это было действительно случайным, вы не можете. Если вы распределите строки равномерно для пользователей, это будет не так рандомизировано? Но если вы хотите это сделать, вам нужно будет использовать цикл. Вы можете увидеть пример здесь: http://stackoverflow.com/questions/5856073/for-each-in-ms-sql-server (ответ Бишопа за 2008 год) – Kuzgun

Смежные вопросы