SQL Упорядочивание записей по "весу"

У нас есть система, которая обрабатывает записи по номеру "приоритета" в таблице. Мы определяем приоритет по содержимому таблицы, например,

UPDATE table
SET priority=3
WHERE processed IS NULL

UPDATE table
SET priority=2
WHERE balance>50

UPDATE table
SET priority=1
WHERE value='blah'

(пожалуйста, не обращайте внимания на то, что между приоритетами могут быть "накладки" :) )

Это работает нормально - таблица обрабатывается в порядке приоритета, поэтому все строки, где столбец "значение" равен "blah", обрабатываются первыми.

Мне дали задание добавить возможность упорядочить записи по определенному "весу". Например, мы хотим, чтобы 50% обработок были с приоритетом 1, 25% с приоритетом 2 и 25% с приоритетом 3. Таким образом, исходя из вышесказанного, в каждых 100 записях 50 из них будут теми, где "value" равно 'blah', 25 из них будут теми, где "balance" больше 50 и т.д.

Я пытаюсь понять, как это сделать: что-то вроде взвешенного возрастающего значения для "приоритета", кажется, было бы лучшим способом, но я не могу понять, как это закодировать. Кто-нибудь может помочь, пожалуйста?

EDIT: Извиняюсь, надо было сказать: это работает на MSSQL 2008

5
задан KenD 28 October 2011 в 09:34
поделиться