2016-09-29 7 views
0

У меня есть таблица, показывающая доступные даты для некоторых сотрудников с двумя полями - staffid и дату с информацией, которая выглядит: `Как применять произвольно выбранные значения различных дат в SQL Server

staffid  date 
1   2016-01-01 
1   2016-01-02 
1   2016-01-03 
2   2016-01-03 
3   2016-01-01 
3   2016-01-03 

мне нужно генерировать список доступных дней DISTINCT из этой таблицы, где персонал, выбранный для каждой даты, выбирается случайным образом. Я знаю, как выбирать строки на основе одного отдельного поля (см., Например, ответ here, но это всегда будет выбирать строки, основанные на заданном порядке в таблице (так, например, штат 1 для 1 января, в то время как мне нужен выбор для .. быть случайным, так что иногда 1 будет выбран в качестве отдельной строки, а иногда и сотрудники 3 будут выбраны

результат должен быть упорядочены по дате

+2

Возможный дубликат [Как для запроса случайной строки в SQL?] (http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql) –

+0

Вопрос не в выборе случайной строки, это это выбор случайной строки DISTINCT. – user1480192

+0

, так что возможный дубликат - это, может быть, первый намек, на который можно пойти – swe

ответ

0

Попробуйте это:

-- test data 
create table your_table (staffid int, [date] date); 
insert into your_table values 
(1,  '2016-01-01'), 
(1,  '2016-01-02'), 
(1,  '2016-01-03'), 
(2,  '2016-01-03'), 
(3,  '2016-01-01'), 
(3,  '2016-01-03'); 

-- query 
select * 
from (
    select distinct [date] [distinct_date] from your_table 
) as d 
outer apply (
    select top 1 staffid 
    from your_table 
    where d.[distinct_date] = [date] 
    order by newid() 
) as x 

-- result 1 
distinct_date staffid 
----------------------- 
2016-01-01  3 
2016-01-02  1 
2016-01-03  1 

-- result 2 
distinct_date staffid 
----------------------- 
2016-01-01  1 
2016-01-02  1 
2016-01-03  2 

надеюсь, что это помогает :)