2015-12-03 5 views
1

Скажем, у меня есть следующая таблица:Как я могу рандомизировать строки после группировки по столбцу?

MyTable

id | val | val2 
--------------- 
1 | 'a' | 1.2 
1 | 'b' | 2.3 
1 | 'c' | 3.4 
2 | 'b' | 4.5 
2 | 'c' | 5.6 
2 | 'b' | 6.7 
2 | 'a' | 7.8 
2 | 'd' | 8.9 

Я хочу, чтобы запрос, который будет случайно возвращение один из строк для каждого уникального id. Но результат не должен «разделять» сопряжение между val и val2. Так

id | val | val2 
--------------- 
1 | 'a' | 1.2 
2 | 'b' | 4.5 

является допустимым результатом, но

id | val | val2 
--------------- 
1 | 'a' | 1.2 
2 | 'b' | 5.6 

нет.

Заранее за вашу помощь.

ответ

2

Вы можете использовать ROW_NUMBER и NEWID() для случайной сортировки:

SELECT 
    id, val1, val2 
FROM (
    SELECT *, 
     Rn = ROW_NUMBER() OVER(PARTITION BY id ORDER BY NEWID()) 
    FROM tbl 
)t 
WHERE Rn = 1 
Смежные вопросы