2016-09-29 56 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,而我需要選擇。被隨機所以有時1會被選中作爲不同行,有時工作人員3將被選中

結果需要按日期排序

+2

可能重複[How在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 

希望它有助於:)